You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/03/10 18:22:44 UTC

[01/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 58f514086 -> 5eb822036


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
index e8e86bf..4be7696 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
@@ -25,526 +25,588 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertTrue;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.fail;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.Callable;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.commons.logging.Log;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.commons.logging.LogFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.impl.Log4JLogger;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Put;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Table;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.log4j.Level;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.After;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import com.google.protobuf.RpcController;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import com.google.protobuf.ServiceException;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * accumulated (potentially empty).<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category(MediumTests.class)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestScannerHeartbeatMessages {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private static Table TABLE = null;<a name="line.82"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.Callable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.impl.Log4JLogger;<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.Path;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableName;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Table;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.log4j.Level;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Before;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.BeforeClass;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>import com.google.protobuf.RpcController;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import com.google.protobuf.ServiceException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * accumulated (potentially empty).<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category(MediumTests.class)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>public class TestScannerHeartbeatMessages {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Table configuration<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static int NUM_ROWS = 10;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.91"></a>
+<span class="sourceLineNo">084</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static Table TABLE = null;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Table configuration<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static int NUM_FAMILIES = 3;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.95"></a>
+<span class="sourceLineNo">093</span>  private static int NUM_ROWS = 5;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static int NUM_QUALIFIERS = 3;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.99"></a>
+<span class="sourceLineNo">097</span>  private static int NUM_FAMILIES = 3;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static int VALUE_SIZE = 128;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // message to the client<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // reached<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @BeforeClass<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // Check the timeout condition after every cell<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    TEST_UTIL.startMiniCluster(1);<a name="line.132"></a>
+<span class="sourceLineNo">101</span>  private static int NUM_QUALIFIERS = 3;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static int VALUE_SIZE = 128;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // message to the client<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // reached<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  @BeforeClass<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static void setUpBeforeClass() throws Exception {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.132"></a>
 <span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    ht.put(puts);<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return ht;<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>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param rows<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param families<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param qualifiers<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param value<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      byte[] value) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Put put;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      put = new Put(rows[row]);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          put.add(kv);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      puts.add(put);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return puts;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @AfterClass<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public static void tearDownAfterClass() throws Exception {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Before<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public void setupBeforeTest() throws Exception {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    disableSleeping();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @After<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  public void teardownAfterTest() throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    disableSleeping();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * other due to changing static variables<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 testScannerHeartbeatMessages() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * disabled, the test should throw an exception.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param testCallable<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @throws InterruptedException<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      testCallable.call();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (Exception e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          + ExceptionUtils.getStackTrace(e));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    try {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      testCallable.call();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    } catch (Exception e) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    } finally {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * fetched.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return new Callable&lt;Void&gt;() {<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      public Void call() throws Exception {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // the case where a scan stops on the server side due to a time limit<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        Scan scan = new Scan();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        return null;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    };<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * @throws Exception<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return new Callable&lt;Void&gt;() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Void call() throws Exception {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        // the case where a scan stops on the server side due to a time limit<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        Scan baseScan = new Scan();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // fields may be changed such as start row<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        Scan scanCopy = new Scan(baseScan);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        scanCopy = new Scan(baseScan);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return null;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    };<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * necessary<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * @param scan The scan configuration being tested<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   *          that column family are fetched<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   */<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    disableSleeping();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Result r1 = null;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    Result r2 = null;<a name="line.295"></a>
+<span class="sourceLineNo">134</span>    // Check the timeout condition after every cell<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    TEST_UTIL.startMiniCluster(1);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ht.put(puts);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return ht;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param rows<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param families<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param qualifiers<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param value<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      byte[] value) throws IOException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Put put;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      put = new Put(rows[row]);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          put.add(kv);<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>      puts.add(put);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return puts;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @AfterClass<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static void tearDownAfterClass() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Before<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void setupBeforeTest() throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    disableSleeping();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @After<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void teardownAfterTest() throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    disableSleeping();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * other due to changing static variables<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  @Test<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void testScannerHeartbeatMessages() throws Exception {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    testImportanceOfHeartbeats(testHeartbeatWithSparseFilter());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * disabled, the test should throw an exception.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * @param testCallable<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @throws InterruptedException<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      testCallable.call();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (Exception e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          + ExceptionUtils.getStackTrace(e));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      testCallable.call();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    } catch (Exception e) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } finally {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * fetched.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @throws Exception<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return new Callable&lt;Void&gt;() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      public Void call() throws Exception {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // the case where a scan stops on the server side due to a time limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        Scan scan = new Scan();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return null;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    };<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @throws Exception<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return new Callable&lt;Void&gt;() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      public Void call() throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // the case where a scan stops on the server side due to a time limit<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        Scan baseScan = new Scan();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // fields may be changed such as start row<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        Scan scanCopy = new Scan(baseScan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        scanCopy = new Scan(baseScan);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    };<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static class SparseFilter extends FilterBase{<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        Thread.sleep(SERVER_TIME_LIMIT + 10);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      } catch (InterruptedException e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Thread.currentThread().interrupt();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ?<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          ReturnCode.INCLUDE :<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          ReturnCode.SKIP;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
 <span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    while ((r1 = scanner.next()) != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      r2 = scannerWithHeartbeats.next();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      disableSleeping();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>      assertTrue(r2 != null);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        Result.compareResults(r1, r2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      } catch (Exception e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        fail(e.getMessage());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    scanner.close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    scannerWithHeartbeats.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * is negative then that sleep will be disabled<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param rowSleepTime<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param cfSleepTime<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * Disable the sleeping mechanism server side.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static void disableSleeping() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      super(conf);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf, csm);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return new HeartbeatRPCServices(this);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">297</span>    public static Filter parseFrom(final byte [] pbBytes){<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return new SparseFilter();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Test the case that there is a filter which filters most of cells<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @throws Exception<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Callable&lt;Void&gt; testHeartbeatWithSparseFilter() throws Exception {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return new Callable&lt;Void&gt;() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Void call() throws Exception {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Scan scan = new Scan();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        scan.setFilter(new SparseFilter());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResultScanner scanner = TABLE.getScanner(scan);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        int num = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        while (scanner.next() != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          num++;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertEquals(1, num);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        scanner.close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>        scan = new Scan();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        scan.setFilter(new SparseFilter());<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        scan.setAllowPartialResults(true);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        scanner = TABLE.getScanner(scan);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        num = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        while (scanner.next() != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          num++;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        assertEquals(NUM_FAMILIES * NUM_QUALIFIERS, num);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        scanner.close();<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    };<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * necessary<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @param scan The scan configuration being tested<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   *          that column family are fetched<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws Exception<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    disableSleeping();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    Result r1 = null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    Result r2 = null;<a name="line.357"></a>
 <span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private static boolean heartbeatsEnabled = true;<a name="line.363"></a>
+<span class="sourceLineNo">359</span>    while ((r1 = scanner.next()) != null) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      r2 = scannerWithHeartbeats.next();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      disableSleeping();<a name="line.363"></a>
 <span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public HeartbeatRPCServices(HRegionServer rs) throws IOException {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      super(rs);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public ScanResponse scan(RpcController controller, ScanRequest request) <a name="line.370"></a>
-<span class="sourceLineNo">371</span>        throws ServiceException {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      ScanRequest.Builder builder = ScanRequest.newBuilder(request);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      builder.setClientHandlesHeartbeats(heartbeatsEnabled);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      return super.scan(controller, builder.build());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">365</span>      assertTrue(r2 != null);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        Result.compareResults(r1, r2);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      } catch (Exception e) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        fail(e.getMessage());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    scanner.close();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    scannerWithHeartbeats.close();<a name="line.375"></a>
 <span class="sourceLineNo">376</span>  }<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
 <span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Custom HRegion class that instantiates {@link RegionScanner}s with configurable sleep times<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * between fetches of row Results and/or column family cells. Useful for emulating an instance<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * where the server is taking a long time to process a client's scan request<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static class HeartbeatHRegion extends HRegion {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Row sleeps occur AFTER each row worth of cells is retrieved.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private static int rowSleepTime = DEFAULT_ROW_SLEEP_TIME;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private static boolean sleepBetweenRows = false;<a name="line.386"></a>
+<span class="sourceLineNo">379</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * is negative then that sleep will be disabled<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @param rowSleepTime<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @param cfSleepTime<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // The sleep for column families can be initiated before or after we fetch the cells for the<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    // column family. If the sleep occurs BEFORE then the time limits will be reached inside<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // StoreScanner while we are fetching individual cells. If the sleep occurs AFTER then the time<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // limit will be reached inside RegionScanner after all the cells for a column family have been<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // retrieved.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    private static boolean sleepBeforeColumnFamily = false;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    private static int columnFamilySleepTime = DEFAULT_CF_SLEEP_TIME;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    private static boolean sleepBetweenColumnFamilies = false;<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public HeartbeatHRegion(Path tableDir, WAL wal, FileSystem fs, Configuration confParam,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        HRegionInfo regionInfo, HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    public HeartbeatHRegion(HRegionFileSystem fs, WAL wal, Configuration confParam,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      super(fs, wal, confParam, htd, rsServices);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    private static void columnFamilySleep() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (HeartbeatHRegion.sleepBetweenColumnFamilies) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        try {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          Thread.sleep(HeartbeatHRegion.columnFamilySleepTime);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        } catch (InterruptedException e) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    private static void rowSleep() {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (HeartbeatHRegion.sleepBetweenRows) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          Thread.sleep(HeartbeatHRegion.rowSleepTime);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      } catch (InterruptedException e) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // Instantiate the custom heartbeat region scanners<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        List&lt;KeyValueScanner&gt; additionalScanners, boolean copyCells) throws IOException {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      if (scan.isReversed()) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (scan.getFilter() != null) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          scan.getFilter().setReversed(true);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        return new HeartbeatReversedRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return new HeartbeatRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Custom ReversedRegionScanner that can be configured to sleep between retrievals of row Results<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * and/or column family cells<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private static class HeartbeatReversedRegionScanner extends ReversedRegionScannerImpl {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    HeartbeatReversedRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        HRegion region, boolean copyCells) throws IOException {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      super(scan, additionalScanners, region, copyCells);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      HeartbeatHRegion.rowSleep();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      return moreRows;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.storeHeap = new HeartbeatReversedKVHeap(scanners, region.getCellCompartor());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!joinedScanners.isEmpty()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.joinedHeap = new HeartbeatReversedKVHeap(joinedScanners, region.getCellCompartor());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  /**<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * Custom RegionScanner that can be configured to sleep between retrievals of row Results and/or<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * column family cells<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  private static class HeartbeatRegionScanner extends RegionScannerImpl {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    HeartbeatRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        boolean copyCells) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      region.super(scan, additionalScanners, region, copyCells);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      HeartbeatHRegion.rowSleep();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return moreRows;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>    @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      this.storeHeap = new HeartbeatKVHeap(scanners, region.getCellCompartor());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (!joinedScanners.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.joinedHeap = new HeartbeatKVHeap(joinedScanners, region.getCellCompartor());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  /**<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * Custom KV Heap that can be configured to sleep/wait in between retrievals of column family<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * cells. Useful for testing<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private static final class HeartbeatKVHeap extends KeyValueHeap {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    public HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, CellComparator comparator)<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      super(scanners, comparator);<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>    HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, KVScannerComparator comparator)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        throws IOException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      super(scanners, comparator);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    @Override<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext context)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      boolean moreRows = super.next(result, context);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      if (!HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.515"></a>
+<span class="sourceLineNo">388</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * Disable the sleeping mechanism server side.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private static void disableSleeping() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super(conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      super(conf, csm);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return new HeartbeatRPCServices(this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.424"></a>

<TRUNCATED>

[10/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
index 79aa3db..3cbc9f0 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
@@ -27,264 +27,368 @@
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileSystem;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.After;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.junit.Before;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.Test;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.experimental.categories.Category;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import static org.junit.Assert.assertEquals;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import static org.junit.Assert.assertTrue;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>@Category({MasterTests.class, SmallTests.class})<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TestYieldProcedures {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Procedure NULL_PROC = null;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private ProcedureStore procStore;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private HBaseCommonTestingUtility htu;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private FileSystem fs;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private Path testDir;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private Path logDir;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @Before<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public void setUp() throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    htu = new HBaseCommonTestingUtility();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    testDir = htu.getDataTestDir();<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    logDir = new Path(testDir, "proc-logs");<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(), procStore);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @After<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public void tearDown() throws IOException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    procExecutor.stop();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    procStore.stop(false);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    fs.delete(logDir, 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>  @Test<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    final int NUM_STATES = 3;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      procExecutor.submitProcedure(procs[i]);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // verify yield during execute()<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    long prevTimestamp = 0;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(execStep);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        assertEquals(false, info.isRollback());<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        prevTimestamp++;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      }<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>    // verify yield during rollback()<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    int count = NUM_STATES;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(count);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        assertEquals(true, info.isRollback());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        prevTimestamp++;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      count++;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final int NUM_STATES = 3;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.126"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Before;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertEquals;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import static org.junit.Assert.assertTrue;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, SmallTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestYieldProcedures {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Procedure NULL_PROC = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TestRunQueue procRunnables;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private ProcedureStore procStore;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private HBaseCommonTestingUtility htu;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileSystem fs;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Path testDir;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Path logDir;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Before<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setUp() throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htu = new HBaseCommonTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    testDir = htu.getDataTestDir();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    logDir = new Path(testDir, "proc-logs");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    procRunnables = new TestRunQueue();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        procStore, procRunnables);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @After<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void tearDown() throws IOException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    procExecutor.stop();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    procStore.stop(false);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fs.delete(logDir, true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    final int NUM_STATES = 3;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      procExecutor.submitProcedure(procs[i]);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // verify execution<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int index = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(false, info.isRollback());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      // verify rollback<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertEquals(true, info.isRollback());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // check runnable queue stats<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, procRunnables.size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertEquals(18, procRunnables.addBackCalls);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(15, procRunnables.yieldCalls);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertEquals(19, procRunnables.pollCalls);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(3, procRunnables.completionCalls);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final int NUM_STATES = 3;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    int count = 0;<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      assertEquals(false, info.isRollback());<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      assertEquals(i, info.getStep().ordinal());<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>      info = proc.getExecutionInfo().get(count++);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      assertEquals(false, info.isRollback());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      assertEquals(i, info.getStep().ordinal());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(true, info.isRollback());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      assertEquals(i, info.getStep().ordinal());<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>      info = proc.getExecutionInfo().get(count++);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      assertEquals(true, info.isRollback());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      assertEquals(i, info.getStep().ordinal());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private static class TestProcEnv {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public long nextTimestamp() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return timestamp.incrementAndGet();<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><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static class TestStateMachineProcedure<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    public class ExecutionInfo {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      private final boolean rollback;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      private final long timestamp;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      private final State step;<a name="line.167"></a>
+<span class="sourceLineNo">128</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertEquals(false, info.isRollback());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      assertEquals(i, info.getStep().ordinal());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      info = proc.getExecutionInfo().get(count++);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      assertEquals(false, info.isRollback());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      assertEquals(i, info.getStep().ordinal());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(true, info.isRollback());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      assertEquals(i, info.getStep().ordinal());<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>      info = proc.getExecutionInfo().get(count++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertEquals(true, info.isRollback());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(i, info.getStep().ordinal());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // check runnable queue stats<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertEquals(0, procRunnables.size());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(12, procRunnables.addBackCalls);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertEquals(11, procRunnables.yieldCalls);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertEquals(13, procRunnables.pollCalls);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public void testYieldException() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    TestYieldProcedure proc = new TestYieldProcedure();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertEquals(6, proc.step);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        this.timestamp = timestamp;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        this.step = step;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        this.rollback = isRollback;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>      public State getStep() { return step; }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      public long getTimestamp() { return timestamp; }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      public boolean isRollback() { return rollback; }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    private final boolean abortOnFinalStep;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    public TestStateMachineProcedure() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      this(false, false);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">169</span>    // check runnable queue stats<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(0, procRunnables.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(6, procRunnables.addBackCalls);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(5, procRunnables.yieldCalls);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    assertEquals(7, procRunnables.pollCalls);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static class TestProcEnv {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    public long nextTimestamp() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return timestamp.incrementAndGet();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public static class TestStateMachineProcedure<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public class ExecutionInfo {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      private final boolean rollback;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      private final long timestamp;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      private final State step;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return executionInfo;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        throws InterruptedException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      LOG.info("execute step " + state);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, false));<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      Thread.sleep(150);<a name="line.204"></a>
+<span class="sourceLineNo">195</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        this.timestamp = timestamp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        this.step = step;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.rollback = isRollback;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      public State getStep() { return step; }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      public long getTimestamp() { return timestamp; }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public boolean isRollback() { return rollback; }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
 <span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.debug("THROW INTERRUPT");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new InterruptedException("test interrupt");<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">206</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    private final boolean abortOnFinalStep;<a name="line.209"></a>
 <span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>      switch (state) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        case STATE_1:<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          setNextState(State.STATE_2);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        case STATE_2:<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          setNextState(State.STATE_3);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        case STATE_3:<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          if (abortOnFinalStep) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          return Flow.NO_MORE_STATE;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        default:<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          throw new UnsupportedOperationException();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      return Flow.HAS_MORE_STATE;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        throws InterruptedException {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      LOG.debug("rollback state " + state);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, true));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Thread.sleep(150);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        LOG.debug("THROW INTERRUPT");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throw new InterruptedException("test interrupt");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      switch (state) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        case STATE_1:<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        case STATE_2:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          break;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case STATE_3:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        default:<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          throw new UnsupportedOperationException();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected State getState(final int stateId) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return State.values()[stateId];<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    protected int getStateId(final State state) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      return state.ordinal();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    protected State getInitialState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return State.STATE_1;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return true;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    protected boolean abort(TestProcEnv env) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      aborted.set(true);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>}<a name="line.279"></a>
+<span class="sourceLineNo">211</span>    public TestStateMachineProcedure() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      this(false, false);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return executionInfo;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        throws InterruptedException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final long ts = env.nextTimestamp();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info(getProcId() + " execute step " + state + " ts=" + ts);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      executionInfo.add(new ExecutionInfo(ts, state, false));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Thread.sleep(150);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.debug("THROW INTERRUPT");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        throw new InterruptedException("test interrupt");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      switch (state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        case STATE_1:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          setNextState(State.STATE_2);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          break;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        case STATE_2:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          setNextState(State.STATE_3);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          break;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        case STATE_3:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          if (abortOnFinalStep) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          return Flow.NO_MORE_STATE;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        default:<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          throw new UnsupportedOperationException();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return Flow.HAS_MORE_STATE;<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>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throws InterruptedException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      final long ts = env.nextTimestamp();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      LOG.debug(getProcId() + " rollback state " + state + " ts=" + ts);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      executionInfo.add(new ExecutionInfo(ts, state, true));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Thread.sleep(150);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("THROW INTERRUPT");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        throw new InterruptedException("test interrupt");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      switch (state) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        case STATE_1:<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          break;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        case STATE_2:<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          break;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        case STATE_3:<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          break;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        default:<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          throw new UnsupportedOperationException();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    protected State getState(final int stateId) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return State.values()[stateId];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    protected int getStateId(final State state) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return state.ordinal();<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>    @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    protected State getInitialState() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return State.STATE_1;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return true;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    protected boolean abort(TestProcEnv env) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      aborted.set(true);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static class TestYieldProcedure extends Procedure&lt;TestProcEnv&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private int step = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public TestYieldProcedure() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>    @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    protected Procedure[] execute(final TestProcEnv env) throws ProcedureYieldException {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.info("execute step " + step);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (step++ &lt; 5) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        throw new ProcedureYieldException();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return null;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected void rollback(TestProcEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected boolean abort(TestProcEnv env) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    protected boolean isYieldAfterExecutionStep(final TestProcEnv env) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return true;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    protected void serializeStateData(final OutputStream stream) throws IOException {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    @Override<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    protected void deserializeStateData(final InputStream stream) throws IOException {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private static class TestRunQueue extends ProcedureSimpleRunQueue {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    private int completionCalls;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    private int addFrontCalls;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    private int addBackCalls;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private int yieldCalls;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private int pollCalls;<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public TestRunQueue() {}<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public void addFront(final Procedure proc) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        addFrontCalls++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        super.addFront(proc);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      public void addBack(final Procedure proc) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        addBackCalls++;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        super.addBack(proc);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>      @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      public void yield(final Procedure proc) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        yieldCalls++;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        super.yield(proc);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      public Procedure poll() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        pollCalls++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return super.poll();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      public void completionCleanup(Procedure proc) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        completionCalls++;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>}<a name="line.383"></a>
 
 
 


[21/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 d749868..af99488 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
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.64"></a>
 <span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,57 +116,57 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 28, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setServerManager(ServerManager serverManager)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 28, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_serverManager = serverManager;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_serverManager__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerManager getServerManager()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_serverManager;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerManager m_serverManager;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getServerManager__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_serverManager__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_serverManager__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 29, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 29, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_assignmentManager = assignmentManager;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_assignmentManager__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public AssignmentManager getAssignmentManager()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_assignmentManager;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private AssignmentManager m_assignmentManager;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_assignmentManager__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 23, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 28, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setServerManager(ServerManager serverManager)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 23, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_servers = servers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_servers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 28, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_serverManager = serverManager;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_serverManager__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public List&lt;ServerName&gt; getServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerManager getServerManager()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_servers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_serverManager;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private List&lt;ServerName&gt; m_servers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerManager m_serverManager;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getServerManager__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_servers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_serverManager__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_servers__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    private boolean m_serverManager__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    // 26, 1<a name="line.162"></a>
 <span class="sourceLineNo">163</span>    public void setFilter(String filter)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
@@ -201,74 +201,74 @@
 <span class="sourceLineNo">193</span>      return m_metaLocation__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
 <span class="sourceLineNo">195</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 21, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.197"></a>
+<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 21, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_frags = frags;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_frags__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_frags;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getFrags__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_frags__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_frags__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 29, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 24, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 29, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_assignmentManager = assignmentManager;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_assignmentManager__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 24, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_deadServers = deadServers;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_deadServers__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public AssignmentManager getAssignmentManager()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_assignmentManager;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_deadServers;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private AssignmentManager m_assignmentManager;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getDeadServers__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_assignmentManager__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_deadServers__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_deadServers__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 27, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setFormat(String format)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 27, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_format = format;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_format__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public String getFormat()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_format;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private String m_format;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getFormat__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_format__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_format__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,24 +280,24 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected ServerManager serverManager;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected AssignmentManager assignmentManager;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected List&lt;ServerName&gt; servers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerManager serverManager;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setServers(p_servers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
@@ -315,31 +315,31 @@
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected boolean catalogJanitorEnabled;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setFrags(p_frags);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected AssignmentManager assignmentManager;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected String format;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setFormat(p_format);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 a6d4b97..3babd0c 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
@@ -68,15 +68,15 @@
 <span class="sourceLineNo">060</span><a name="line.60"></a>
 <span class="sourceLineNo">061</span>{<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private final HMaster master;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private final ServerManager serverManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private final String format;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final List&lt;ServerName&gt; servers;<a name="line.65"></a>
+<span class="sourceLineNo">063</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final AssignmentManager assignmentManager;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final ServerManager serverManager;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>  private final String filter;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  private final ServerName metaLocation;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final AssignmentManager assignmentManager;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final boolean catalogJanitorEnabled;<a name="line.71"></a>
+<span class="sourceLineNo">068</span>  private final boolean catalogJanitorEnabled;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final List&lt;ServerName&gt; servers;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final String format;<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  // 68, 1<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  <a name="line.73"></a>
 <span class="sourceLineNo">074</span>  public String formatZKString() {<a name="line.74"></a>
@@ -106,17 +106,17 @@
 <span class="sourceLineNo">098</span><a name="line.98"></a>
 <span class="sourceLineNo">099</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.99"></a>
 <span class="sourceLineNo">100</span>  {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.101"></a>
+<span class="sourceLineNo">101</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      p_implData.setServerManager(null);<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      p_implData.setFrags(null);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      p_implData.setFormat("html");<a name="line.107"></a>
+<span class="sourceLineNo">107</span>      p_implData.setAssignmentManager(null);<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.109"></a>
+<span class="sourceLineNo">109</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      p_implData.setServers(null);<a name="line.111"></a>
+<span class="sourceLineNo">111</span>      p_implData.setServerManager(null);<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
@@ -126,21 +126,21 @@
 <span class="sourceLineNo">118</span>    {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>      p_implData.setMetaLocation(null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.121"></a>
+<span class="sourceLineNo">121</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      p_implData.setFrags(null);<a name="line.123"></a>
+<span class="sourceLineNo">123</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      p_implData.setAssignmentManager(null);<a name="line.127"></a>
+<span class="sourceLineNo">127</span>      p_implData.setDeadServers(null);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.129"></a>
+<span class="sourceLineNo">129</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      p_implData.setDeadServers(null);<a name="line.131"></a>
+<span class="sourceLineNo">131</span>      p_implData.setServers(null);<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.133"></a>
+<span class="sourceLineNo">133</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.135"></a>
+<span class="sourceLineNo">135</span>      p_implData.setFormat("html");<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
 <span class="sourceLineNo">137</span>    return p_implData;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>  }<a name="line.138"></a>
@@ -148,15 +148,15 @@
 <span class="sourceLineNo">140</span>  {<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.141"></a>
 <span class="sourceLineNo">142</span>    master = p_implData.getMaster();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    serverManager = p_implData.getServerManager();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    format = p_implData.getFormat();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    servers = p_implData.getServers();<a name="line.145"></a>
+<span class="sourceLineNo">143</span>    frags = p_implData.getFrags();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    serverManager = p_implData.getServerManager();<a name="line.145"></a>
 <span class="sourceLineNo">146</span>    filter = p_implData.getFilter();<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    metaLocation = p_implData.getMetaLocation();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    frags = p_implData.getFrags();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    deadServers = p_implData.getDeadServers();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.151"></a>
+<span class="sourceLineNo">148</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    deadServers = p_implData.getDeadServers();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    servers = p_implData.getServers();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    format = p_implData.getFormat();<a name="line.151"></a>
 <span class="sourceLineNo">152</span>  }<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  <a name="line.153"></a>
 <span class="sourceLineNo">154</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.154"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>


[14/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html
index c95f978..9ebde4a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.77">TestScannerHeartbeatMessages</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.81">TestScannerHeartbeatMessages</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Here we test to make sure that scans return the expected Results when the server is sending the
  Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent
@@ -169,6 +169,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Custom RSRpcServices instance that allows heartbeat support to be toggled</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.SparseFilter</a></strong></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -365,12 +369,18 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#testHeartbeatWithSparseFilter()">testHeartbeatWithSparseFilter</a></strong>()</code>
+<div class="block">Test the case that there is a filter which filters most of cells</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#testImportanceOfHeartbeats(java.util.concurrent.Callable)">testImportanceOfHeartbeats</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;testCallable)</code>
 <div class="block">Run the test callable when heartbeats are enabled/disabled.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#testScannerHeartbeatMessages()">testScannerHeartbeatMessages</a></strong>()</code>
 <div class="block">Test a variety of scan configurations to ensure that they return the expected Results when
@@ -405,7 +415,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.78">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.82">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -414,7 +424,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.80">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.84">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="TABLE">
@@ -423,7 +433,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLE</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.82">TABLE</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.86">TABLE</a></pre>
 </li>
 </ul>
 <a name="TABLE_NAME">
@@ -432,7 +442,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLE_NAME</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.87">TABLE_NAME</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.91">TABLE_NAME</a></pre>
 <div class="block">Table configuration</div>
 </li>
 </ul>
@@ -442,7 +452,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>NUM_ROWS</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.89">NUM_ROWS</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.93">NUM_ROWS</a></pre>
 </li>
 </ul>
 <a name="ROW">
@@ -451,7 +461,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ROW</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.90">ROW</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.94">ROW</a></pre>
 </li>
 </ul>
 <a name="ROWS">
@@ -460,7 +470,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ROWS</h4>
-<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.91">ROWS</a></pre>
+<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.95">ROWS</a></pre>
 </li>
 </ul>
 <a name="NUM_FAMILIES">
@@ -469,7 +479,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>NUM_FAMILIES</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.93">NUM_FAMILIES</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.97">NUM_FAMILIES</a></pre>
 </li>
 </ul>
 <a name="FAMILY">
@@ -478,7 +488,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.94">FAMILY</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.98">FAMILY</a></pre>
 </li>
 </ul>
 <a name="FAMILIES">
@@ -487,7 +497,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILIES</h4>
-<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.95">FAMILIES</a></pre>
+<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.99">FAMILIES</a></pre>
 </li>
 </ul>
 <a name="NUM_QUALIFIERS">
@@ -496,7 +506,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>NUM_QUALIFIERS</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.97">NUM_QUALIFIERS</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.101">NUM_QUALIFIERS</a></pre>
 </li>
 </ul>
 <a name="QUALIFIER">
@@ -505,7 +515,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>QUALIFIER</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.98">QUALIFIER</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.102">QUALIFIER</a></pre>
 </li>
 </ul>
 <a name="QUALIFIERS">
@@ -514,7 +524,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>QUALIFIERS</h4>
-<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.99">QUALIFIERS</a></pre>
+<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.103">QUALIFIERS</a></pre>
 </li>
 </ul>
 <a name="VALUE_SIZE">
@@ -523,7 +533,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>VALUE_SIZE</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.101">VALUE_SIZE</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.105">VALUE_SIZE</a></pre>
 </li>
 </ul>
 <a name="VALUE">
@@ -532,7 +542,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>VALUE</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.102">VALUE</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.106">VALUE</a></pre>
 </li>
 </ul>
 <a name="CLIENT_TIMEOUT">
@@ -541,7 +551,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>CLIENT_TIMEOUT</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.107">CLIENT_TIMEOUT</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.111">CLIENT_TIMEOUT</a></pre>
 </li>
 </ul>
 <a name="SERVER_TIME_LIMIT">
@@ -550,7 +560,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>SERVER_TIME_LIMIT</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.110">SERVER_TIME_LIMIT</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.114">SERVER_TIME_LIMIT</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_ROW_SLEEP_TIME">
@@ -559,7 +569,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ROW_SLEEP_TIME</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.113">DEFAULT_ROW_SLEEP_TIME</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.117">DEFAULT_ROW_SLEEP_TIME</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_CF_SLEEP_TIME">
@@ -568,7 +578,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DEFAULT_CF_SLEEP_TIME</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.116">DEFAULT_CF_SLEEP_TIME</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.120">DEFAULT_CF_SLEEP_TIME</a></pre>
 </li>
 </ul>
 </li>
@@ -585,7 +595,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.77">TestScannerHeartbeatMessages</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.81">TestScannerHeartbeatMessages</a>()</pre>
 </li>
 </ul>
 </li>
@@ -602,7 +612,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.119">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.123">setUpBeforeClass</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -614,7 +624,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestTable</h4>
-<pre>static&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.137">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
+<pre>static&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.141">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
                                                    byte[][]&nbsp;rows,
                                                    byte[][]&nbsp;families,
                                                    byte[][]&nbsp;qualifiers,
@@ -630,7 +640,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createPuts</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Put&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.155">createPuts</a>(byte[][]&nbsp;rows,
+<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Put&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.159">createPuts</a>(byte[][]&nbsp;rows,
                                                        byte[][]&nbsp;families,
                                                        byte[][]&nbsp;qualifiers,
                                                        byte[]&nbsp;value)
@@ -648,7 +658,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.175">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.179">tearDownAfterClass</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -660,7 +670,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupBeforeTest</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.181">setupBeforeTest</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.185">setupBeforeTest</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -672,7 +682,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>teardownAfterTest</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.186">teardownAfterTest</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.190">teardownAfterTest</a>()
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -684,7 +694,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testScannerHeartbeatMessages</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.197">testScannerHeartbeatMessages</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.201">testScannerHeartbeatMessages</a>()
                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test a variety of scan configurations to ensure that they return the expected Results when
  heartbeat messages are necessary. These tests are accumulated under one test case to ensure
@@ -700,7 +710,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testImportanceOfHeartbeats</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.209">testImportanceOfHeartbeats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;testCallable)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.214">testImportanceOfHeartbeats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;testCallable)
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass
  when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are
@@ -716,7 +726,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testHeartbeatBetweenRows</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.236">testHeartbeatBetweenRows</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.241">testHeartbeatBetweenRows</a>()
                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test the case that the time limit for the scan is reached after each full row of cells is
  fetched.</div>
@@ -730,20 +740,33 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testHeartbeatBetweenColumnFamilies</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.257">testHeartbeatBetweenColumnFamilies</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.262">testHeartbeatBetweenColumnFamilies</a>()
                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test the case that the time limit for scans is reached in between column families</div>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
 </li>
 </ul>
+<a name="testHeartbeatWithSparseFilter()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testHeartbeatWithSparseFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.306">testHeartbeatWithSparseFilter</a>()
+                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Test the case that there is a filter which filters most of cells</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
 <a name="testEquivalenceOfScanWithHeartbeats(org.apache.hadoop.hbase.client.Scan, int, int, boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>testEquivalenceOfScanWithHeartbeats</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.288">testEquivalenceOfScanWithHeartbeats</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.350">testEquivalenceOfScanWithHeartbeats</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
                                        int&nbsp;rowSleepTime,
                                        int&nbsp;cfSleepTime,
                                        boolean&nbsp;sleepBeforeCf)
@@ -762,7 +785,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>configureSleepTime</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.322">configureSleepTime</a>(int&nbsp;rowSleepTime,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.384">configureSleepTime</a>(int&nbsp;rowSleepTime,
                       int&nbsp;cfSleepTime,
                       boolean&nbsp;sleepBeforeCf)</pre>
 <div class="block">Helper method for setting the time to sleep between rows and column families. If a sleep time
@@ -776,7 +799,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>disableSleeping</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.334">disableSleeping</a>()</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.396">disableSleeping</a>()</pre>
 <div class="block">Disable the sleeping mechanism server side.</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html
index d87fe68..20e006a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.FaultyScannerObserver.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -428,7 +428,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.FaultyScannerObserver.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
index be12cda..c9cf55d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
@@ -154,6 +154,7 @@
 <li><a href="TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</a></li>
 <li><a href="TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</a></li>
 <li><a href="TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatRPCServices</a></li>
+<li><a href="TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.SparseFilter</a></li>
 <li><a href="TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerRetriableFailure</a></li>
 <li><a href="TestScannerRetriableFailure.FaultyScannerObserver.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerRetriableFailure.FaultyScannerObserver</a></li>
 <li><a href="TestScannerWithBulkload.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerWithBulkload</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
index 61b635d..c9adcdf 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
@@ -829,70 +829,74 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerRetriableFailure</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.SparseFilter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.FaultyScannerObserver.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerRetriableFailure.FaultyScannerObserver</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerRetriableFailure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerWithBulkload</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.FaultyScannerObserver.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerRetriableFailure.FaultyScannerObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScanWildcardColumnTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWildcardColumnTracker</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerWithBulkload</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScanWildcardColumnTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWildcardColumnTracker</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWithBloomError</a></td>
 <td class="colLast">
 <div class="block">Test a multi-column scanner when there is a Bloom filter false-positive.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSCVFWithMiniCluster.html" title="class in org.apache.hadoop.hbase.regionserver">TestSCVFWithMiniCluster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.html" title="class in org.apache.hadoop.hbase.regionserver">TestSeekOptimizations</a></td>
 <td class="colLast">
 <div class="block">Test various seek optimizations for correctness and check if they are
  actually saving I/O operations.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.html" title="class in org.apache.hadoop.hbase.regionserver">TestServerCustomProtocol</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.PingHandler.html" title="class in org.apache.hadoop.hbase.regionserver">TestServerCustomProtocol.PingHandler</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestServerNonceManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestServerNonceManager.TestRunnable.html" title="class in org.apache.hadoop.hbase.regionserver">TestServerNonceManager.TestRunnable</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitLogWorker</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransaction.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransaction</a></td>
 <td class="colLast">
 <div class="block">Test the <code>SplitTransactionImpl</code> class against an HRegion (as opposed to
  running cluster).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransaction.CustomObserver.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransaction.CustomObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster</a></td>
 <td class="colLast">
 <div class="block">Like TestSplitTransaction in that we're testing <code>SplitTransactionImpl</code>
@@ -900,148 +904,148 @@
  is tests against a bare <code>HRegion</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.CustomSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.CustomSplitPolicy</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.FailingSplitRegionObserver.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.FailingSplitRegionObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MockedCoordinatedStateManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.MockedCoordinatedStateManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MockedRegionObserver.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.MockedRegionObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MockedSplitTransaction.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.MockedSplitTransaction</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMaster.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.MyMaster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMasterRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.MyMasterRpcServices</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.UselessTestAbortable.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.UselessTestAbortable</a></td>
 <td class="colLast">
 <div class="block">Noop Abortable implementation used below in tests.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitWalDataLoss.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitWalDataLoss</a></td>
 <td class="colLast">
 <div class="block">Testcase for https://issues.apache.org/jira/browse/HBASE-13811</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestStore</a></td>
 <td class="colLast">
 <div class="block">Test class for the Store</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStore.DummyStoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">TestStore.DummyStoreEngine</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStore.FaultyFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">TestStore.FaultyFileSystem</a></td>
 <td class="colLast">
 <div class="block">Faulty file system that will fail if you write past its fault position the FIRST TIME
  only; thereafter it will succeed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStore.FaultyOutputStream.html" title="class in org.apache.hadoop.hbase.regionserver">TestStore.FaultyOutputStream</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFile</a></td>
 <td class="colLast">
 <div class="block">Test HStoreFile</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileInfo</a></td>
 <td class="colLast">
 <div class="block">Test HStoreFile</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileRefresherChore</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileRefresherChore.FailingHRegionFileSystem</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.StaleStorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileRefresherChore.StaleStorefileRefresherChore</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreFileScannerWithTagCompression.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileScannerWithTagCompression</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreScanner</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeCompactor.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeCompactor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeCompactor.Scanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeCompactor.Scanner</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeCompactor.StoreFileWritersCapture.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeCompactor.StoreFileWritersCapture</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeCompactor.StoreFileWritersCapture.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeCompactor.StoreFileWritersCapture.Writer</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeStoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeStoreEngine</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeStoreEngine.TestStoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeStoreEngine.TestStoreEngine</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeStoreFileManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestTags.html" title="class in org.apache.hadoop.hbase.regionserver">TestTags</a></td>
 <td class="colLast">
 <div class="block">Class that test tags</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestTags.TestCoprocessorForTags.html" title="class in org.apache.hadoop.hbase.regionserver">TestTags.TestCoprocessorForTags</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestTimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestTimeRangeTracker</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestWALLockup.html" title="class in org.apache.hadoop.hbase.regionserver">TestWALLockup</a></td>
 <td class="colLast">
 <div class="block">Testing for lock up of WAL subsystem.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestWideScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestWideScanner</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index cbe2a53..58490f8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -190,6 +190,15 @@
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/EncodedSeekPerformanceTest.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">EncodedSeekPerformanceTest</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.Filter
+<ul>
+<li type="circle">org.apache.hadoop.hbase.filter.FilterBase
+<ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">TestScannerHeartbeatMessages.SparseFilter</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.util.HasThread (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.HRegionServer (implements org.apache.hadoop.hbase.conf.ConfigurationObserver, org.apache.hadoop.hbase.regionserver.LastSequenceId, org.apache.hadoop.hbase.regionserver.RegionServerServices)
@@ -549,9 +558,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html
index 5995e73..cc1b14f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html
@@ -218,7 +218,7 @@ implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</pre
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index dc6951c..52b2b91 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -234,8 +234,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index f462705..899b131 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -870,6 +870,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestHCM.BlockingFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestHCM.BlockingFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestInvocationRecordFilter.InvocationRecordFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="strong">TestInvocationRecordFilter.InvocationRecordFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.NoDataFilter.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="strong">TestRegionObserverScannerOpenHook.NoDataFilter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">TestScannerHeartbeatMessages.SparseFilter</span></a></li>
 </ul>
 </li>
 </ul>
@@ -1498,6 +1499,7 @@
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureToString.DoublingStateStringBasicProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureToString.DoublingStateStringBasicProcedure</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestYieldProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
@@ -1519,6 +1521,11 @@
 </li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue (implements org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestRunQueue</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">ProcedureTestingUtility</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">ProcessBasedLocalHBaseCluster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.LocalDaemonLogTailer.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">ProcessBasedLocalHBaseCluster.LocalDaemonLogTailer</span></a> (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
index de9de2a..000721f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
@@ -263,7 +263,7 @@
 <span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.255"></a>
 <span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.261"></a>
@@ -281,7 +281,7 @@
 <span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.279"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
index de9de2a..000721f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
@@ -263,7 +263,7 @@
 <span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.255"></a>
 <span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.261"></a>
@@ -281,7 +281,7 @@
 <span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.279"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
index de9de2a..000721f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
@@ -263,7 +263,7 @@
 <span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.255"></a>
 <span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.261"></a>
@@ -281,7 +281,7 @@
 <span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.279"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
index de9de2a..000721f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
@@ -263,7 +263,7 @@
 <span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.255"></a>
 <span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.261"></a>
@@ -281,7 +281,7 @@
 <span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.279"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
index de9de2a..000721f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
@@ -263,7 +263,7 @@
 <span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.255"></a>
 <span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.261"></a>
@@ -281,7 +281,7 @@
 <span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.279"></a>


[45/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
index a1dd88e..1a4e494 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
@@ -527,35 +527,42 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</code>
 <div class="block">Extend the toString() information with the procedure details
  e.g.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</code>
 <div class="block">Called from <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()"><code>toString()</code></a> when interpolating <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2"><code>Procedure</code></a> state</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></strong>()</code>&nbsp;</td>
 </tr>
@@ -884,13 +891,31 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
          Defaults to return false.</dd></dl>
 </li>
 </ul>
+<a name="shouldWaitClientAck(java.lang.Object)">
+<!--   -->
+</a><a name="shouldWaitClientAck(TEnvironment)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>shouldWaitClientAck</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.202">shouldWaitClientAck</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired. The client can cut down the waiting time
+ by requesting that the result is removed from the executor.
+ In case of system started procedure, we can force the executor to auto-ack.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
+<dt><span class="strong">Returns:</span></dt><dd>true if the executor should wait the client ack for the result.
+         Defaults to return true.</dd></dl>
+</li>
+</ul>
 <a name="toString()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.194">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.207">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -903,7 +928,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringClass</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.218">toStringClass</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.231">toStringClass</a>()</pre>
 </li>
 </ul>
 <a name="toStringState(java.lang.StringBuilder)">
@@ -912,7 +937,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.229">toStringState</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.242">toStringState</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</pre>
 <div class="block">Called from <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()"><code>toString()</code></a> when interpolating <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2"><code>Procedure</code></a> state</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>builder</code> - Append current <code>ProcedureProtos.ProcedureState</code></dd></dl>
 </li>
@@ -923,7 +948,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringClassDetails</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.238">toStringClassDetails</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.251">toStringClassDetails</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</pre>
 <div class="block">Extend the toString() information with the procedure details
  e.g. className and parameters</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>builder</code> - the string builder to use to append the proc specific information</dd></dl>
@@ -935,7 +960,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getResult</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.245">getResult</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.258">getResult</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the serialized result if any, otherwise null</dd></dl>
 </li>
 </ul>
@@ -945,7 +970,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setResult</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.253">setResult</a>(byte[]&nbsp;result)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.266">setResult</a>(byte[]&nbsp;result)</pre>
 <div class="block">The procedure may leave a "result" on completion.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>result</code> - the serialized result that will be passed to the client</dd></dl>
 </li>
@@ -956,7 +981,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.257">getProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.270">getProcId</a>()</pre>
 </li>
 </ul>
 <a name="hasParent()">
@@ -965,7 +990,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hasParent</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.261">hasParent</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.274">hasParent</a>()</pre>
 </li>
 </ul>
 <a name="hasException()">
@@ -974,7 +999,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hasException</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.265">hasException</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.278">hasException</a>()</pre>
 </li>
 </ul>
 <a name="hasTimeout()">
@@ -983,7 +1008,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hasTimeout</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.269">hasTimeout</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.282">hasTimeout</a>()</pre>
 </li>
 </ul>
 <a name="getParentProcId()">
@@ -992,7 +1017,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.273">getParentProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.286">getParentProcId</a>()</pre>
 </li>
 </ul>
 <a name="getNonceKey()">
@@ -1001,7 +1026,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceKey</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.277">getNonceKey</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.290">getNonceKey</a>()</pre>
 </li>
 </ul>
 <a name="isFailed()">
@@ -1010,7 +1035,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isFailed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.285">isFailed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.298">isFailed</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the procedure has failed.
          true may mean failed but not yet rolledback or failed and rolledback.</dd></dl>
 </li>
@@ -1021,7 +1046,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isSuccess</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.292">isSuccess</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.305">isSuccess</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the procedure is finished successfully.</dd></dl>
 </li>
 </ul>
@@ -1031,7 +1056,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.300">isFinished</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.313">isFinished</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the procedure is finished. The Procedure may be completed
          successfuly or failed and rolledback.</dd></dl>
 </li>
@@ -1042,7 +1067,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isWaiting</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.315">isWaiting</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.328">isWaiting</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the procedure is waiting for a child to finish or for an external event.</dd></dl>
 </li>
 </ul>
@@ -1052,7 +1077,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getException</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.326">getException</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.339">getException</a>()</pre>
 </li>
 </ul>
 <a name="getStartTime()">
@@ -1061,7 +1086,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.330">getStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.343">getStartTime</a>()</pre>
 </li>
 </ul>
 <a name="getLastUpdate()">
@@ -1070,7 +1095,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastUpdate</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.334">getLastUpdate</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.347">getLastUpdate</a>()</pre>
 </li>
 </ul>
 <a name="elapsedTime()">
@@ -1079,7 +1104,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>elapsedTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.338">elapsedTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.351">elapsedTime</a>()</pre>
 </li>
 </ul>
 <a name="setTimeout(int)">
@@ -1088,7 +1113,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeout</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.345">setTimeout</a>(int&nbsp;timeout)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.358">setTimeout</a>(int&nbsp;timeout)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>timeout</code> - timeout in msec</dd></dl>
 </li>
 </ul>
@@ -1098,7 +1123,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeout</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.352">getTimeout</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.365">getTimeout</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the timeout in msec</dd></dl>
 </li>
 </ul>
@@ -1108,7 +1133,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeRemaining</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.359">getTimeRemaining</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.372">getTimeRemaining</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the remaining time before the timeout</dd></dl>
 </li>
 </ul>
@@ -1119,7 +1144,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <li class="blockList">
 <h4>setOwner</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.365">setOwner</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;owner)</pre>
+public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.378">setOwner</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;owner)</pre>
 </li>
 </ul>
 <a name="getOwner()">
@@ -1128,7 +1153,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/p
 <ul class="blockList">
 <li class="blockList">
 <h4>getOwner</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.369">getOwner</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.382">getOwner</a>()</pre>
 </li>
 </ul>
 <a name="hasOwner()">
@@ -1137,7 +1162,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/p
 <ul class="blockList">
 <li class="blockList">
 <h4>hasOwner</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.373">hasOwner</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.386">hasOwner</a>()</pre>
 </li>
 </ul>
 <a name="setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">
@@ -1147,7 +1172,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/p
 <li class="blockList">
 <h4>setState</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.379">setState</a>(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;state)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.392">setState</a>(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;state)</pre>
 </li>
 </ul>
 <a name="getState()">
@@ -1157,7 +1182,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>getState</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.385">getState</a>()</pre>
+protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.398">getState</a>()</pre>
 </li>
 </ul>
 <a name="setFailure(java.lang.String, java.lang.Throwable)">
@@ -1166,7 +1191,7 @@ protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Proced
 <ul class="blockList">
 <li class="blockList">
 <h4>setFailure</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.389">setFailure</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.402">setFailure</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 </li>
 </ul>
@@ -1176,7 +1201,7 @@ protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Proced
 <ul class="blockList">
 <li class="blockList">
 <h4>setFailure</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.393">setFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;exception)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.406">setFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;exception)</pre>
 </li>
 </ul>
 <a name="setAbortFailure(java.lang.String, java.lang.String)">
@@ -1185,7 +1210,7 @@ protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Proced
 <ul class="blockList">
 <li class="blockList">
 <h4>setAbortFailure</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.400">setAbortFailure</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.413">setAbortFailure</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 </li>
 </ul>
@@ -1196,7 +1221,7 @@ protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Proced
 <li class="blockList">
 <h4>setTimeoutFailure</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.405">setTimeoutFailure</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.418">setTimeoutFailure</a>()</pre>
 </li>
 </ul>
 <a name="setProcId(long)">
@@ -1206,7 +1231,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>setProcId</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.420">setProcId</a>(long&nbsp;procId)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.433">setProcId</a>(long&nbsp;procId)</pre>
 <div class="block">Called by the ProcedureExecutor to assign the ID to the newly created procedure.</div>
 </li>
 </ul>
@@ -1217,7 +1242,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>setParentProcId</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.430">setParentProcId</a>(long&nbsp;parentProcId)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.443">setParentProcId</a>(long&nbsp;parentProcId)</pre>
 <div class="block">Called by the ProcedureExecutor to assign the parent to the newly created procedure.</div>
 </li>
 </ul>
@@ -1228,7 +1253,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>setNonceKey</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.439">setNonceKey</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.452">setNonceKey</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
 <div class="block">Called by the ProcedureExecutor to set the value to the newly created procedure.</div>
 </li>
 </ul>
@@ -1241,7 +1266,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>doExecute</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.448">doExecute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
+protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.461">doExecute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
                          throws <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Internal method called by the ProcedureExecutor that starts the
@@ -1260,7 +1285,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Proced
 <li class="blockList">
 <h4>doRollback</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.463">doRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.476">doRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                           <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Internal method called by the ProcedureExecutor that starts the
@@ -1277,7 +1302,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>setStartTime</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.478">setStartTime</a>(long&nbsp;startTime)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.491">setStartTime</a>(long&nbsp;startTime)</pre>
 <div class="block">Called on store load to initialize the Procedure internals after
  the creation/deserialization.</div>
 </li>
@@ -1288,7 +1313,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>setLastUpdate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.486">setLastUpdate</a>(long&nbsp;lastUpdate)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.499">setLastUpdate</a>(long&nbsp;lastUpdate)</pre>
 <div class="block">Called on store load to initialize the Procedure internals after
  the creation/deserialization.</div>
 </li>
@@ -1299,7 +1324,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>updateTimestamp</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.490">updateTimestamp</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.503">updateTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="setChildrenLatch(int)">
@@ -1309,7 +1334,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>setChildrenLatch</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.498">setChildrenLatch</a>(int&nbsp;numChildren)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.511">setChildrenLatch</a>(int&nbsp;numChildren)</pre>
 <div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
 </li>
 </ul>
@@ -1320,7 +1345,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>incChildrenLatch</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.506">incChildrenLatch</a>()</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.519">incChildrenLatch</a>()</pre>
 <div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
 </li>
 </ul>
@@ -1331,7 +1356,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>childrenCountDown</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.516">childrenCountDown</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.529">childrenCountDown</a>()</pre>
 <div class="block">Called by the ProcedureExecutor to notify that one of the sub-procedures
  has completed.</div>
 </li>
@@ -1343,7 +1368,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>addStackIndex</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.526">addStackIndex</a>(int&nbsp;index)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.539">addStackIndex</a>(int&nbsp;index)</pre>
 <div class="block">Called by the RootProcedureState on procedure execution.
  Each procedure store its stack-index positions.</div>
 </li>
@@ -1355,7 +1380,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>removeStackIndex</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.537">removeStackIndex</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.550">removeStackIndex</a>()</pre>
 </li>
 </ul>
 <a name="setStackIndexes(java.util.List)">
@@ -1365,7 +1390,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>setStackIndexes</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.552">setStackIndexes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;stackIndexes)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.565">setStackIndexes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;stackIndexes)</pre>
 <div class="block">Called on store load to initialize the Procedure internals after
  the creation/deserialization.</div>
 </li>
@@ -1377,7 +1402,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>wasExecuted</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.560">wasExecuted</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.573">wasExecuted</a>()</pre>
 </li>
 </ul>
 <a name="getStackIndexes()">
@@ -1387,7 +1412,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>getStackIndexes</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.565">getStackIndexes</a>()</pre>
+protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.578">getStackIndexes</a>()</pre>
 </li>
 </ul>
 <a name="compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">
@@ -1396,7 +1421,7 @@ protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.570">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;other)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.583">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;other)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;</code></dd>
@@ -1409,7 +1434,7 @@ protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcIdHashCode</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.579">getProcIdHashCode</a>(long&nbsp;procId)</pre>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.592">getProcIdHashCode</a>(long&nbsp;procId)</pre>
 <div class="block">Get an hashcode for the specified Procedure ID</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the hashcode for the specified procId</dd></dl>
 </li>
@@ -1421,7 +1446,7 @@ protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>getRootProcedureId</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.593">getRootProcedureId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;procedures,
+protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.606">getRootProcedureId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;procedures,
                                                 <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
@@ -1431,7 +1456,7 @@ protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lan
 <ul class="blockList">
 <li class="blockList">
 <h4>newInstance</h4>
-<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.601">newInstance</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)
+<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.614">newInstance</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1443,7 +1468,7 @@ protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lan
 <ul class="blockList">
 <li class="blockList">
 <h4>validateClass</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.620">validateClass</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.633">validateClass</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1456,7 +1481,7 @@ protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lan
 <li class="blockList">
 <h4>createProcedureInfo</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.642">createProcedureInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.655">createProcedureInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                                                           <a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
 <div class="block">Helper to create the ProcedureInfo from Procedure.</div>
 </li>
@@ -1468,7 +1493,7 @@ public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo
 <li class="blockList">
 <h4>convert</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.663">convert</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)
+public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.676">convert</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)
                                                                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Helper to convert the procedure to protobuf.
  Used by ProcedureStore implementations.</div>
@@ -1483,7 +1508,7 @@ public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Pr
 <li class="blockList">
 <h4>convert</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.729">convert</a>(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;proto)
+public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.742">convert</a>(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;proto)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Helper to convert the protobuf procedure.
  Used by ProcedureStore implementations.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
index 4ac6de1..95b0a35 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
@@ -263,7 +263,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbas
 e.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../.
 ./org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Proced
 ure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(or
 g.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/
 Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedur
 e2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbas
 e.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../.
 ./org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Proced
 ure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(or
 g.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/
 Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedu
 re2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -438,7 +438,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>execute</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.192">execute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html" title="type parameter in ProcedureExecutor.CompletedProcedureCleaner">TEnvironment</a>&nbsp;env)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.193">execute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html" title="type parameter in ProcedureExecutor.CompletedProcedureCleaner">TEnvironment</a>&nbsp;env)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute(TEnvironment)">Procedure</a></code></strong></div>
 <div class="block">The main code of the procedure. It must be idempotent since execute()
  may be called multiple time in case of machine failure in the middle
@@ -458,7 +458,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>rollback</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.197">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html" title="type parameter in ProcedureExecutor.CompletedProcedureCleaner">TEnvironment</a>&nbsp;env)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.198">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html" title="type parameter in ProcedureExecutor.CompletedProcedureCleaner">TEnvironment</a>&nbsp;env)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback(TEnvironment)">Procedure</a></code></strong></div>
 <div class="block">The code to undo what done by the execute() code.
  It is called when the procedure or one of the sub-procedure failed or an
@@ -480,7 +480,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.202">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html" title="type parameter in ProcedureExecutor.CompletedProcedureCleaner">TEnvironment</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.203">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html" title="type parameter in ProcedureExecutor.CompletedProcedureCleaner">TEnvironment</a>&nbsp;env)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">Procedure</a></code></strong></div>
 <div class="block">The abort() call is asynchronous and each procedure must decide how to deal
  with that, if they want to be abortable. The simplest implementation
@@ -504,7 +504,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.207">serializeStateData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.208">serializeStateData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData(java.io.OutputStream)">Procedure</a></code></strong></div>
 <div class="block">The user-level code of the procedure may have some state to
  persist (e.g. input arguments) to be able to resume on failure.</div>
@@ -520,7 +520,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.212">deserializeStateData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html#line.213">deserializeStateData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData(java.io.InputStream)">Procedure</a></code></strong></div>
 <div class="block">Called on store load to allow the user to decode the previously serialized
  state.</div>


[02/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
index e8e86bf..4be7696 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
@@ -25,526 +25,588 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertTrue;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.fail;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.Callable;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.commons.logging.Log;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.commons.logging.LogFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.impl.Log4JLogger;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Put;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Table;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.log4j.Level;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.After;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import com.google.protobuf.RpcController;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import com.google.protobuf.ServiceException;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * accumulated (potentially empty).<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category(MediumTests.class)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestScannerHeartbeatMessages {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private static Table TABLE = null;<a name="line.82"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.Callable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.impl.Log4JLogger;<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.Path;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableName;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Table;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.log4j.Level;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Before;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.BeforeClass;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>import com.google.protobuf.RpcController;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import com.google.protobuf.ServiceException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * accumulated (potentially empty).<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category(MediumTests.class)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>public class TestScannerHeartbeatMessages {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Table configuration<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static int NUM_ROWS = 10;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.91"></a>
+<span class="sourceLineNo">084</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static Table TABLE = null;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Table configuration<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static int NUM_FAMILIES = 3;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.95"></a>
+<span class="sourceLineNo">093</span>  private static int NUM_ROWS = 5;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static int NUM_QUALIFIERS = 3;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.99"></a>
+<span class="sourceLineNo">097</span>  private static int NUM_FAMILIES = 3;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static int VALUE_SIZE = 128;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // message to the client<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // reached<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @BeforeClass<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // Check the timeout condition after every cell<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    TEST_UTIL.startMiniCluster(1);<a name="line.132"></a>
+<span class="sourceLineNo">101</span>  private static int NUM_QUALIFIERS = 3;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static int VALUE_SIZE = 128;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // message to the client<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // reached<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  @BeforeClass<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static void setUpBeforeClass() throws Exception {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.132"></a>
 <span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    ht.put(puts);<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return ht;<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>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param rows<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param families<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param qualifiers<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param value<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      byte[] value) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Put put;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      put = new Put(rows[row]);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          put.add(kv);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      puts.add(put);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return puts;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @AfterClass<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public static void tearDownAfterClass() throws Exception {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Before<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public void setupBeforeTest() throws Exception {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    disableSleeping();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @After<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  public void teardownAfterTest() throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    disableSleeping();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * other due to changing static variables<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 testScannerHeartbeatMessages() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * disabled, the test should throw an exception.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param testCallable<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @throws InterruptedException<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      testCallable.call();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (Exception e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          + ExceptionUtils.getStackTrace(e));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    try {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      testCallable.call();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    } catch (Exception e) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    } finally {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * fetched.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return new Callable&lt;Void&gt;() {<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      public Void call() throws Exception {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // the case where a scan stops on the server side due to a time limit<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        Scan scan = new Scan();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        return null;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    };<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * @throws Exception<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return new Callable&lt;Void&gt;() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Void call() throws Exception {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        // the case where a scan stops on the server side due to a time limit<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        Scan baseScan = new Scan();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // fields may be changed such as start row<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        Scan scanCopy = new Scan(baseScan);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        scanCopy = new Scan(baseScan);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return null;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    };<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * necessary<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * @param scan The scan configuration being tested<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   *          that column family are fetched<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   */<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    disableSleeping();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Result r1 = null;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    Result r2 = null;<a name="line.295"></a>
+<span class="sourceLineNo">134</span>    // Check the timeout condition after every cell<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    TEST_UTIL.startMiniCluster(1);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ht.put(puts);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return ht;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param rows<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param families<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param qualifiers<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param value<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      byte[] value) throws IOException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Put put;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      put = new Put(rows[row]);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          put.add(kv);<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>      puts.add(put);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return puts;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @AfterClass<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static void tearDownAfterClass() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Before<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void setupBeforeTest() throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    disableSleeping();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @After<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void teardownAfterTest() throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    disableSleeping();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * other due to changing static variables<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  @Test<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void testScannerHeartbeatMessages() throws Exception {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    testImportanceOfHeartbeats(testHeartbeatWithSparseFilter());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * disabled, the test should throw an exception.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * @param testCallable<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @throws InterruptedException<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      testCallable.call();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (Exception e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          + ExceptionUtils.getStackTrace(e));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      testCallable.call();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    } catch (Exception e) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } finally {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * fetched.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @throws Exception<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return new Callable&lt;Void&gt;() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      public Void call() throws Exception {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // the case where a scan stops on the server side due to a time limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        Scan scan = new Scan();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return null;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    };<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @throws Exception<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return new Callable&lt;Void&gt;() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      public Void call() throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // the case where a scan stops on the server side due to a time limit<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        Scan baseScan = new Scan();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // fields may be changed such as start row<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        Scan scanCopy = new Scan(baseScan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        scanCopy = new Scan(baseScan);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    };<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static class SparseFilter extends FilterBase{<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        Thread.sleep(SERVER_TIME_LIMIT + 10);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      } catch (InterruptedException e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Thread.currentThread().interrupt();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ?<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          ReturnCode.INCLUDE :<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          ReturnCode.SKIP;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
 <span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    while ((r1 = scanner.next()) != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      r2 = scannerWithHeartbeats.next();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      disableSleeping();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>      assertTrue(r2 != null);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        Result.compareResults(r1, r2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      } catch (Exception e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        fail(e.getMessage());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    scanner.close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    scannerWithHeartbeats.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * is negative then that sleep will be disabled<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param rowSleepTime<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param cfSleepTime<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * Disable the sleeping mechanism server side.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static void disableSleeping() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      super(conf);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf, csm);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return new HeartbeatRPCServices(this);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">297</span>    public static Filter parseFrom(final byte [] pbBytes){<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return new SparseFilter();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Test the case that there is a filter which filters most of cells<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @throws Exception<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Callable&lt;Void&gt; testHeartbeatWithSparseFilter() throws Exception {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return new Callable&lt;Void&gt;() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Void call() throws Exception {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Scan scan = new Scan();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        scan.setFilter(new SparseFilter());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResultScanner scanner = TABLE.getScanner(scan);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        int num = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        while (scanner.next() != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          num++;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertEquals(1, num);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        scanner.close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>        scan = new Scan();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        scan.setFilter(new SparseFilter());<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        scan.setAllowPartialResults(true);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        scanner = TABLE.getScanner(scan);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        num = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        while (scanner.next() != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          num++;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        assertEquals(NUM_FAMILIES * NUM_QUALIFIERS, num);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        scanner.close();<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    };<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * necessary<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @param scan The scan configuration being tested<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   *          that column family are fetched<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws Exception<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    disableSleeping();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    Result r1 = null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    Result r2 = null;<a name="line.357"></a>
 <span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private static boolean heartbeatsEnabled = true;<a name="line.363"></a>
+<span class="sourceLineNo">359</span>    while ((r1 = scanner.next()) != null) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      r2 = scannerWithHeartbeats.next();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      disableSleeping();<a name="line.363"></a>
 <span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public HeartbeatRPCServices(HRegionServer rs) throws IOException {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      super(rs);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public ScanResponse scan(RpcController controller, ScanRequest request) <a name="line.370"></a>
-<span class="sourceLineNo">371</span>        throws ServiceException {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      ScanRequest.Builder builder = ScanRequest.newBuilder(request);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      builder.setClientHandlesHeartbeats(heartbeatsEnabled);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      return super.scan(controller, builder.build());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">365</span>      assertTrue(r2 != null);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        Result.compareResults(r1, r2);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      } catch (Exception e) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        fail(e.getMessage());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    scanner.close();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    scannerWithHeartbeats.close();<a name="line.375"></a>
 <span class="sourceLineNo">376</span>  }<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
 <span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Custom HRegion class that instantiates {@link RegionScanner}s with configurable sleep times<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * between fetches of row Results and/or column family cells. Useful for emulating an instance<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * where the server is taking a long time to process a client's scan request<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static class HeartbeatHRegion extends HRegion {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Row sleeps occur AFTER each row worth of cells is retrieved.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private static int rowSleepTime = DEFAULT_ROW_SLEEP_TIME;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private static boolean sleepBetweenRows = false;<a name="line.386"></a>
+<span class="sourceLineNo">379</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * is negative then that sleep will be disabled<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @param rowSleepTime<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @param cfSleepTime<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // The sleep for column families can be initiated before or after we fetch the cells for the<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    // column family. If the sleep occurs BEFORE then the time limits will be reached inside<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // StoreScanner while we are fetching individual cells. If the sleep occurs AFTER then the time<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // limit will be reached inside RegionScanner after all the cells for a column family have been<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // retrieved.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    private static boolean sleepBeforeColumnFamily = false;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    private static int columnFamilySleepTime = DEFAULT_CF_SLEEP_TIME;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    private static boolean sleepBetweenColumnFamilies = false;<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public HeartbeatHRegion(Path tableDir, WAL wal, FileSystem fs, Configuration confParam,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        HRegionInfo regionInfo, HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    public HeartbeatHRegion(HRegionFileSystem fs, WAL wal, Configuration confParam,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      super(fs, wal, confParam, htd, rsServices);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    private static void columnFamilySleep() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (HeartbeatHRegion.sleepBetweenColumnFamilies) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        try {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          Thread.sleep(HeartbeatHRegion.columnFamilySleepTime);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        } catch (InterruptedException e) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    private static void rowSleep() {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (HeartbeatHRegion.sleepBetweenRows) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          Thread.sleep(HeartbeatHRegion.rowSleepTime);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      } catch (InterruptedException e) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // Instantiate the custom heartbeat region scanners<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        List&lt;KeyValueScanner&gt; additionalScanners, boolean copyCells) throws IOException {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      if (scan.isReversed()) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (scan.getFilter() != null) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          scan.getFilter().setReversed(true);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        return new HeartbeatReversedRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return new HeartbeatRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Custom ReversedRegionScanner that can be configured to sleep between retrievals of row Results<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * and/or column family cells<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private static class HeartbeatReversedRegionScanner extends ReversedRegionScannerImpl {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    HeartbeatReversedRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        HRegion region, boolean copyCells) throws IOException {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      super(scan, additionalScanners, region, copyCells);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      HeartbeatHRegion.rowSleep();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      return moreRows;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.storeHeap = new HeartbeatReversedKVHeap(scanners, region.getCellCompartor());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!joinedScanners.isEmpty()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.joinedHeap = new HeartbeatReversedKVHeap(joinedScanners, region.getCellCompartor());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  /**<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * Custom RegionScanner that can be configured to sleep between retrievals of row Results and/or<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * column family cells<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  private static class HeartbeatRegionScanner extends RegionScannerImpl {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    HeartbeatRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        boolean copyCells) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      region.super(scan, additionalScanners, region, copyCells);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      HeartbeatHRegion.rowSleep();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return moreRows;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>    @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      this.storeHeap = new HeartbeatKVHeap(scanners, region.getCellCompartor());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (!joinedScanners.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.joinedHeap = new HeartbeatKVHeap(joinedScanners, region.getCellCompartor());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  /**<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * Custom KV Heap that can be configured to sleep/wait in between retrievals of column family<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * cells. Useful for testing<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private static final class HeartbeatKVHeap extends KeyValueHeap {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    public HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, CellComparator comparator)<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      super(scanners, comparator);<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>    HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, KVScannerComparator comparator)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        throws IOException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      super(scanners, comparator);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    @Override<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext context)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      boolean moreRows = super.next(result, context);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      if (!HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.515"></a>
+<span class="sourceLineNo">388</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * Disable the sleeping mechanism server side.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private static void disableSleeping() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super(conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      super(conf, csm);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return new HeartbeatRPCServices(this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.424"></a>
+<sp

<TRUNCATED>

[40/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
index c971a4e..6296370 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
@@ -389,414 +389,409 @@
 <span class="sourceLineNo">381</span>    Result[] values = null;<a name="line.381"></a>
 <span class="sourceLineNo">382</span>    long remainingResultSize = maxScannerResultSize;<a name="line.382"></a>
 <span class="sourceLineNo">383</span>    int countdown = this.caching;<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    // We need to reset it if it's a new callable that was created<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    // with a countdown in nextScanner<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    callable.setCaching(this.caching);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // This flag is set when we want to skip the result returned. We do<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    // this when we reset scanner because it split under us.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    boolean retryAfterOutOfOrderException = true;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // We don't expect that the server will have more results for us if<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // it doesn't tell us otherwise. We rely on the size or count of results<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    boolean serverHasMoreResults = false;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    do {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      try {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        // Server returns a null values if scanning is to stop. Else,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        // returns an empty array if scanning is to go on and we've just<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        // exhausted current region.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        values = call(callable, caller, scannerTimeout);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        // When the replica switch happens, we need to do certain operations<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // again. The callable will openScanner with the right startkey<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        // but we need to pick up from there. Bypass the rest of the loop<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // and let the catch-up happen in the beginning of the loop as it<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        // happens for the cases where we see exceptions. Since only openScanner<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // would have happened, values would be null<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        if (values == null &amp;&amp; callable.switchedToADifferentReplica()) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          // Any accumulated partial results are no longer valid since the callable will<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          // openScanner with the correct startkey and we must pick up from there<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          clearPartialResults();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          this.currentRegion = callable.getHRegionInfo();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          continue;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        retryAfterOutOfOrderException = true;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      } catch (DoNotRetryIOException e) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // An exception was thrown which makes any partial results that we were collecting<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        // invalid. The scanner will need to be reset to the beginning of a row.<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        clearPartialResults();<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>        // DNRIOEs are thrown to make us break out of retries. Some types of DNRIOEs want us<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        // to reset the scanner and come back in again.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        if (e instanceof UnknownScannerException) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          long timeout = lastNext + scannerTimeout;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          // If we are over the timeout, throw this exception to the client wrapped in<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          // a ScannerTimeoutException. Else, it's because the region moved and we used the old<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          // id against the new region server; reset the scanner.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          if (timeout &lt; System.currentTimeMillis()) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            LOG.info("For hints related to the following exception, please try taking a look at: " +<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                "https://hbase.apache.org/book.html#trouble.client.scantimeout");<a name="line.428"></a>
-<span class="sourceLineNo">429</span>            long elapsed = System.currentTimeMillis() - lastNext;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            ScannerTimeoutException ex =<a name="line.430"></a>
-<span class="sourceLineNo">431</span>                new ScannerTimeoutException(elapsed + "ms passed since the last invocation, "<a name="line.431"></a>
-<span class="sourceLineNo">432</span>                    + "timeout is currently set to " + scannerTimeout);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>            ex.initCause(e);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            throw ex;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        } else {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          // If exception is any but the list below throw it back to the client; else setup<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          // the scanner and retry.<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          Throwable cause = e.getCause();<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          if ((cause != null &amp;&amp; cause instanceof NotServingRegionException) ||<a name="line.440"></a>
-<span class="sourceLineNo">441</span>              (cause != null &amp;&amp; cause instanceof RegionServerStoppedException) ||<a name="line.441"></a>
-<span class="sourceLineNo">442</span>              e instanceof OutOfOrderScannerNextException) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            // Pass<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            // It is easier writing the if loop test as list of what is allowed rather than<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            // as a list of what is not allowed... so if in here, it means we do not throw.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            throw e;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        // Else, its signal from depths of ScannerCallable that we need to reset the scanner.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        if (this.lastResult != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          // The region has moved. We need to open a brand new scanner at<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          // the new location.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          // Reset the startRow to the row we've seen last so that the new<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // scanner starts at the correct row. Otherwise we may see previously<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          // returned rows again.<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          // (ScannerCallable by now has "relocated" the correct region)<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          if (scan.isReversed()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>            scan.setStartRow(createClosestRowBefore(lastResult.getRow()));<a name="line.459"></a>
+<span class="sourceLineNo">384</span>    // We need to reset it if it's a new callable that was created with a countdown in nextScanner<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    callable.setCaching(this.caching);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    // This flag is set when we want to skip the result returned. We do<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    // this when we reset scanner because it split under us.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    boolean retryAfterOutOfOrderException = true;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // We don't expect that the server will have more results for us if<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    // it doesn't tell us otherwise. We rely on the size or count of results<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    boolean serverHasMoreResults = false;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    do {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      try {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        // Server returns a null values if scanning is to stop. Else,<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        // returns an empty array if scanning is to go on and we've just<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        // exhausted current region.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        values = call(callable, caller, scannerTimeout);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        // When the replica switch happens, we need to do certain operations again.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        // The callable will openScanner with the right startkey but we need to pick up<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        // from there. Bypass the rest of the loop and let the catch-up happen in the beginning<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        // of the loop as it happens for the cases where we see exceptions.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Since only openScanner would have happened, values would be null<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        if (values == null &amp;&amp; callable.switchedToADifferentReplica()) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          // Any accumulated partial results are no longer valid since the callable will<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          // openScanner with the correct startkey and we must pick up from there<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          clearPartialResults();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          this.currentRegion = callable.getHRegionInfo();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          continue;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        retryAfterOutOfOrderException = true;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (DoNotRetryIOException e) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // An exception was thrown which makes any partial results that we were collecting<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        // invalid. The scanner will need to be reset to the beginning of a row.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        clearPartialResults();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        // DNRIOEs are thrown to make us break out of retries. Some types of DNRIOEs want us<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        // to reset the scanner and come back in again.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        if (e instanceof UnknownScannerException) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          long timeout = lastNext + scannerTimeout;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // If we are over the timeout, throw this exception to the client wrapped in<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          // a ScannerTimeoutException. Else, it's because the region moved and we used the old<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          // id against the new region server; reset the scanner.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          if (timeout &lt; System.currentTimeMillis()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>            LOG.info("For hints related to the following exception, please try taking a look at: "<a name="line.423"></a>
+<span class="sourceLineNo">424</span>                    + "https://hbase.apache.org/book.html#trouble.client.scantimeout");<a name="line.424"></a>
+<span class="sourceLineNo">425</span>            long elapsed = System.currentTimeMillis() - lastNext;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            ScannerTimeoutException ex =<a name="line.426"></a>
+<span class="sourceLineNo">427</span>                new ScannerTimeoutException(elapsed + "ms passed since the last invocation, "<a name="line.427"></a>
+<span class="sourceLineNo">428</span>                    + "timeout is currently set to " + scannerTimeout);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            ex.initCause(e);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            throw ex;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          }<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        } else {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          // If exception is any but the list below throw it back to the client; else setup<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          // the scanner and retry.<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          Throwable cause = e.getCause();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          if ((cause != null &amp;&amp; cause instanceof NotServingRegionException) ||<a name="line.436"></a>
+<span class="sourceLineNo">437</span>              (cause != null &amp;&amp; cause instanceof RegionServerStoppedException) ||<a name="line.437"></a>
+<span class="sourceLineNo">438</span>              e instanceof OutOfOrderScannerNextException) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>            // Pass. It is easier writing the if loop test as list of what is allowed rather than<a name="line.439"></a>
+<span class="sourceLineNo">440</span>            // as a list of what is not allowed... so if in here, it means we do not throw.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>          } else {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>            throw e;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>          }<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        // Else, its signal from depths of ScannerCallable that we need to reset the scanner.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        if (this.lastResult != null) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>          // The region has moved. We need to open a brand new scanner at the new location.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>          // Reset the startRow to the row we've seen last so that the new scanner starts at<a name="line.448"></a>
+<span class="sourceLineNo">449</span>          // the correct row. Otherwise we may see previously returned rows again.<a name="line.449"></a>
+<span class="sourceLineNo">450</span>          // (ScannerCallable by now has "relocated" the correct region)<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          if (scan.isReversed()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>            scan.setStartRow(createClosestRowBefore(lastResult.getRow()));<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          } else {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>            scan.setStartRow(Bytes.add(lastResult.getRow(), new byte[1]));<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        if (e instanceof OutOfOrderScannerNextException) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          if (retryAfterOutOfOrderException) {<a name="line.458"></a>
+<span class="sourceLineNo">459</span>            retryAfterOutOfOrderException = false;<a name="line.459"></a>
 <span class="sourceLineNo">460</span>          } else {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>            scan.setStartRow(Bytes.add(lastResult.getRow(), new byte[1]));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        if (e instanceof OutOfOrderScannerNextException) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          if (retryAfterOutOfOrderException) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            retryAfterOutOfOrderException = false;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          } else {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>            // TODO: Why wrap this in a DNRIOE when it already is a DNRIOE?<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            throw new DoNotRetryIOException("Failed after retry of " +<a name="line.469"></a>
-<span class="sourceLineNo">470</span>                "OutOfOrderScannerNextException: was there a rpc timeout?", e);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        // Clear region.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        this.currentRegion = null;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        // Set this to zero so we don't try and do an rpc and close on remote server when<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        // the exception we got was UnknownScanner or the Server is going down.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        callable = null;<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>        // This continue will take us to while at end of loop where we will set up new scanner.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        continue;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      long currentTime = System.currentTimeMillis();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      if (this.scanMetrics != null) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        this.scanMetrics.sumOfMillisSecBetweenNexts.addAndGet(currentTime - lastNext);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      lastNext = currentTime;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      // Groom the array of Results that we received back from the server before adding that<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      // Results to the scanner's cache. If partial results are not allowed to be seen by the<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      // caller, all book keeping will be performed within this method.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      List&lt;Result&gt; resultsToAddToCache =<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          getResultsToAddToCache(values, callable.isHeartbeatMessage());<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (!resultsToAddToCache.isEmpty()) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        for (Result rs : resultsToAddToCache) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          cache.add(rs);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          long estimatedHeapSizeOfResult = calcEstimatedSize(rs);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          countdown--;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          remainingResultSize -= estimatedHeapSizeOfResult;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          addEstimatedSize(estimatedHeapSizeOfResult);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          this.lastResult = rs;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>      // Caller of this method just wants a Result. If we see a heartbeat message, it means<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      // processing of the scan is taking a long time server side. Rather than continue to<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      // loop until a limit (e.g. size or caching) is reached, break out early to avoid causing<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      // unnecesary delays to the caller<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      if (callable.isHeartbeatMessage() &amp;&amp; cache.size() &gt; 0) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        if (LOG.isTraceEnabled()) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          LOG.trace("Heartbeat message received and cache contains Results."<a name="line.509"></a>
-<span class="sourceLineNo">510</span>              + " Breaking out of scan loop");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        break;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      // We expect that the server won't have more results for us when we exhaust<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // the size (bytes or count) of the results returned. If the server *does* inform us that<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // there are more results, we want to avoid possiblyNextScanner(...). Only when we actually<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      // get results is the moreResults context valid.<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (null != values &amp;&amp; values.length &gt; 0 &amp;&amp; callable.hasMoreResultsContext()) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        // Only adhere to more server results when we don't have any partialResults<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        // as it keeps the outer loop logic the same.<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        serverHasMoreResults = callable.getServerHasMoreResults() &amp; partialResults.isEmpty();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      // Values == null means server-side filter has determined we must STOP<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      // !partialResults.isEmpty() means that we are still accumulating partial Results for a<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      // row. We should not change scanners before we receive all the partial Results for that<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      // row.<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    } while (doneWithRegion(remainingResultSize, countdown, serverHasMoreResults)<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        &amp;&amp; (!partialResults.isEmpty() || possiblyNextScanner(countdown, values == null)));<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>  /**<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @param remainingResultSize<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * @param remainingRows<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * @param regionHasMoreResults<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   * @return true when the current region has been exhausted. When the current region has been<a name="line.536"></a>
-<span class="sourceLineNo">537</span>   *         exhausted, the region must be changed before scanning can continue<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  private boolean doneWithRegion(long remainingResultSize, int remainingRows,<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      boolean regionHasMoreResults) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return remainingResultSize &gt; 0 &amp;&amp; remainingRows &gt; 0 &amp;&amp; !regionHasMoreResults;<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected long calcEstimatedSize(Result rs) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long estimatedHeapSizeOfResult = 0;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    // We don't make Iterator here<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    for (Cell cell : rs.rawCells()) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      estimatedHeapSizeOfResult += CellUtil.estimatedHeapSizeOf(cell);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    return estimatedHeapSizeOfResult;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  protected void addEstimatedSize(long estimatedHeapSizeOfResult) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    return;<a name="line.554"></a>
+<span class="sourceLineNo">461</span>            // TODO: Why wrap this in a DNRIOE when it already is a DNRIOE?<a name="line.461"></a>
+<span class="sourceLineNo">462</span>            throw new DoNotRetryIOException("Failed after retry of " +<a name="line.462"></a>
+<span class="sourceLineNo">463</span>                "OutOfOrderScannerNextException: was there a rpc timeout?", e);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          }<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        }<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        // Clear region.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        this.currentRegion = null;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        // Set this to zero so we don't try and do an rpc and close on remote server when<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        // the exception we got was UnknownScanner or the Server is going down.<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        callable = null;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        // This continue will take us to while at end of loop where we will set up new scanner.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        continue;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      long currentTime = System.currentTimeMillis();<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      if (this.scanMetrics != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        this.scanMetrics.sumOfMillisSecBetweenNexts.addAndGet(currentTime - lastNext);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      lastNext = currentTime;<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      // Groom the array of Results that we received back from the server before adding that<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Results to the scanner's cache. If partial results are not allowed to be seen by the<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      // caller, all book keeping will be performed within this method.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      List&lt;Result&gt; resultsToAddToCache =<a name="line.482"></a>
+<span class="sourceLineNo">483</span>          getResultsToAddToCache(values, callable.isHeartbeatMessage());<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      if (!resultsToAddToCache.isEmpty()) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        for (Result rs : resultsToAddToCache) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>          cache.add(rs);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          long estimatedHeapSizeOfResult = calcEstimatedSize(rs);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          countdown--;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          remainingResultSize -= estimatedHeapSizeOfResult;<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          addEstimatedSize(estimatedHeapSizeOfResult);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          this.lastResult = rs;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      if (callable.isHeartbeatMessage()) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>        if (cache.size() &gt; 0) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          // Caller of this method just wants a Result. If we see a heartbeat message, it means<a name="line.496"></a>
+<span class="sourceLineNo">497</span>          // processing of the scan is taking a long time server side. Rather than continue to<a name="line.497"></a>
+<span class="sourceLineNo">498</span>          // loop until a limit (e.g. size or caching) is reached, break out early to avoid causing<a name="line.498"></a>
+<span class="sourceLineNo">499</span>          // unnecesary delays to the caller<a name="line.499"></a>
+<span class="sourceLineNo">500</span>          if (LOG.isTraceEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            LOG.trace("Heartbeat message received and cache contains Results."<a name="line.501"></a>
+<span class="sourceLineNo">502</span>                    + " Breaking out of scan loop");<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          }<a name="line.503"></a>
+<span class="sourceLineNo">504</span>          break;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>        continue;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>      // We expect that the server won't have more results for us when we exhaust<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      // the size (bytes or count) of the results returned. If the server *does* inform us that<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      // there are more results, we want to avoid possiblyNextScanner(...). Only when we actually<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      // get results is the moreResults context valid.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      if (null != values &amp;&amp; values.length &gt; 0 &amp;&amp; callable.hasMoreResultsContext()) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>        // Only adhere to more server results when we don't have any partialResults<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        // as it keeps the outer loop logic the same.<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        serverHasMoreResults = callable.getServerHasMoreResults() &amp;&amp; partialResults.isEmpty();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      }<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      // Values == null means server-side filter has determined we must STOP<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // !partialResults.isEmpty() means that we are still accumulating partial Results for a<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // row. We should not change scanners before we receive all the partial Results for that<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      // row.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    } while ((callable != null &amp;&amp; callable.isHeartbeatMessage())<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        || (doneWithRegion(remainingResultSize, countdown, serverHasMoreResults)<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        &amp;&amp; (!partialResults.isEmpty() || possiblyNextScanner(countdown, values == null))));<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span>  /**<a name="line.527"></a>
+<span class="sourceLineNo">528</span>   * @param remainingResultSize<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * @param remainingRows<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * @param regionHasMoreResults<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * @return true when the current region has been exhausted. When the current region has been<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   *         exhausted, the region must be changed before scanning can continue<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  private boolean doneWithRegion(long remainingResultSize, int remainingRows,<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      boolean regionHasMoreResults) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    return remainingResultSize &gt; 0 &amp;&amp; remainingRows &gt; 0 &amp;&amp; !regionHasMoreResults;<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>  protected long calcEstimatedSize(Result rs) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    long estimatedHeapSizeOfResult = 0;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    // We don't make Iterator here<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    for (Cell cell : rs.rawCells()) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      estimatedHeapSizeOfResult += CellUtil.estimatedHeapSizeOf(cell);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    return estimatedHeapSizeOfResult;<a name="line.545"></a>
+<span class="sourceLineNo">546</span>  }<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span>  protected void addEstimatedSize(long estimatedHeapSizeOfResult) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  @VisibleForTesting<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  public int getCacheCount() {<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return cache != null ? cache.size() : 0;<a name="line.554"></a>
 <span class="sourceLineNo">555</span>  }<a name="line.555"></a>
 <span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  @VisibleForTesting<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public int getCacheCount() {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    return cache != null ? cache.size() : 0;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>  /**<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * This method ensures all of our book keeping regarding partial results is kept up to date. This<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * method should be called once we know that the results we received back from the RPC request do<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * not contain errors. We return a list of results that should be added to the cache. In general,<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * this list will contain all NON-partial results from the input array (unless the client has<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * specified that they are okay with receiving partial results)<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param resultsFromServer The array of {@link Result}s returned from the server<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @param heartbeatMessage Flag indicating whether or not the response received from the server<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   *          represented a complete response, or a heartbeat message that was sent to keep the<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   *          client-server connection alive<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * @return the list of results that should be added to the cache.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * @throws IOException<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  protected List&lt;Result&gt;<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      getResultsToAddToCache(Result[] resultsFromServer, boolean heartbeatMessage)<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          throws IOException {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    int resultSize = resultsFromServer != null ? resultsFromServer.length : 0;<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    List&lt;Result&gt; resultsToAddToCache = new ArrayList&lt;Result&gt;(resultSize);<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>    final boolean isBatchSet = scan != null &amp;&amp; scan.getBatch() &gt; 0;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    final boolean allowPartials = scan != null &amp;&amp; scan.getAllowPartialResults();<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>    // If the caller has indicated in their scan that they are okay with seeing partial results,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    // then simply add all results to the list. Note that since scan batching also returns results<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    // for a row in pieces we treat batch being set as equivalent to allowing partials. The<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    // implication of treating batching as equivalent to partial results is that it is possible<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    // the caller will receive a result back where the number of cells in the result is less than<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    // the batch size even though it may not be the last group of cells for that row.<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    if (allowPartials || isBatchSet) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      addResultsToList(resultsToAddToCache, resultsFromServer, 0,<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          (null == resultsFromServer ? 0 : resultsFromServer.length));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      return resultsToAddToCache;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>    // If no results were returned it indicates that either we have the all the partial results<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    // necessary to construct the complete result or the server had to send a heartbeat message<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    // to the client to keep the client-server connection alive<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    if (resultsFromServer == null || resultsFromServer.length == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // If this response was an empty heartbeat message, then we have not exhausted the region<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      // and thus there may be more partials server side that still need to be added to the partial<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      // list before we form the complete Result<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      if (!partialResults.isEmpty() &amp;&amp; !heartbeatMessage) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        resultsToAddToCache.add(Result.createCompleteResult(partialResults));<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        clearPartialResults();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      return resultsToAddToCache;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * This method ensures all of our book keeping regarding partial results is kept up to date. This<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * method should be called once we know that the results we received back from the RPC request do<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * not contain errors. We return a list of results that should be added to the cache. In general,<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * this list will contain all NON-partial results from the input array (unless the client has<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * specified that they are okay with receiving partial results)<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * @param resultsFromServer The array of {@link Result}s returned from the server<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   * @param heartbeatMessage Flag indicating whether or not the response received from the server<a name="line.564"></a>
+<span class="sourceLineNo">565</span>   *          represented a complete response, or a heartbeat message that was sent to keep the<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   *          client-server connection alive<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @return the list of results that should be added to the cache.<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   * @throws IOException<a name="line.568"></a>
+<span class="sourceLineNo">569</span>   */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  protected List&lt;Result&gt;<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      getResultsToAddToCache(Result[] resultsFromServer, boolean heartbeatMessage)<a name="line.571"></a>
+<span class="sourceLineNo">572</span>          throws IOException {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    int resultSize = resultsFromServer != null ? resultsFromServer.length : 0;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    List&lt;Result&gt; resultsToAddToCache = new ArrayList&lt;Result&gt;(resultSize);<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    final boolean isBatchSet = scan != null &amp;&amp; scan.getBatch() &gt; 0;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    final boolean allowPartials = scan != null &amp;&amp; scan.getAllowPartialResults();<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>    // If the caller has indicated in their scan that they are okay with seeing partial results,<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // then simply add all results to the list. Note that since scan batching also returns results<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    // for a row in pieces we treat batch being set as equivalent to allowing partials. The<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    // implication of treating batching as equivalent to partial results is that it is possible<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    // the caller will receive a result back where the number of cells in the result is less than<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    // the batch size even though it may not be the last group of cells for that row.<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    if (allowPartials || isBatchSet) {<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      addResultsToList(resultsToAddToCache, resultsFromServer, 0,<a name="line.586"></a>
+<span class="sourceLineNo">587</span>          (null == resultsFromServer ? 0 : resultsFromServer.length));<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return resultsToAddToCache;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    // If no results were returned it indicates that either we have the all the partial results<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    // necessary to construct the complete result or the server had to send a heartbeat message<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    // to the client to keep the client-server connection alive<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    if (resultsFromServer == null || resultsFromServer.length == 0) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      // If this response was an empty heartbeat message, then we have not exhausted the region<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      // and thus there may be more partials server side that still need to be added to the partial<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      // list before we form the complete Result<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      if (!partialResults.isEmpty() &amp;&amp; !heartbeatMessage) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        resultsToAddToCache.add(Result.createCompleteResult(partialResults));<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        clearPartialResults();<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      }<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>      return resultsToAddToCache;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    // In every RPC response there should be at most a single partial result. Furthermore, if<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    // there is a partial result, it is guaranteed to be in the last position of the array.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    Result last = resultsFromServer[resultsFromServer.length - 1];<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    Result partial = last.isPartial() ? last : null;<a name="line.609"></a>
 <span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    // In every RPC response there should be at most a single partial result. Furthermore, if<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    // there is a partial result, it is guaranteed to be in the last position of the array.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    Result last = resultsFromServer[resultsFromServer.length - 1];<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    Result partial = last.isPartial() ? last : null;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    if (LOG.isTraceEnabled()) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      StringBuilder sb = new StringBuilder();<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      sb.append("number results from RPC: ").append(resultsFromServer.length).append(",");<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      sb.append("partial != null: ").append(partial != null).append(",");<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      sb.append("number of partials so far: ").append(partialResults.size());<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      LOG.trace(sb.toString());<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>    // There are three possibilities cases that can occur while handling partial results<a name="line.624"></a>
+<span class="sourceLineNo">611</span>    if (LOG.isTraceEnabled()) {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      StringBuilder sb = new StringBuilder();<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append("number results from RPC: ").append(resultsFromServer.length).append(",");<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      sb.append("partial != null: ").append(partial != null).append(",");<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      sb.append("number of partials so far: ").append(partialResults.size());<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      LOG.trace(sb.toString());<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>    // There are three possibilities cases that can occur while handling partial results<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    //<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    // 1. (partial != null &amp;&amp; partialResults.isEmpty())<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    // This is the first partial result that we have received. It should be added to<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    // the list of partialResults and await the next RPC request at which point another<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    // portion of the complete result will be received<a name="line.624"></a>
 <span class="sourceLineNo">625</span>    //<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    // 1. (partial != null &amp;&amp; partialResults.isEmpty())<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // This is the first partial result that we have received. It should be added to<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    // the list of partialResults and await the next RPC request at which point another<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    // portion of the complete result will be received<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    //<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    // 2. !partialResults.isEmpty()<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    // Since our partialResults list is not empty it means that we have been accumulating partial<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // Results for a particular row. We cannot form the complete/whole Result for that row until<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    // all partials for the row have been received. Thus we loop through all of the Results<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    // returned from the server and determine whether or not all partial Results for the row have<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    // been received. We know that we have received all of the partial Results for the row when:<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    // i) We notice a row change in the Results<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    // ii) We see a Result for the partial row that is NOT marked as a partial Result<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    //<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    // 3. (partial == null &amp;&amp; partialResults.isEmpty())<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    // Business as usual. We are not accumulating partial results and there wasn't a partial result<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    // in the RPC response. This means that all of the results we received from the server are<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    // complete and can be added directly to the cache<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    if (partial != null &amp;&amp; partialResults.isEmpty()) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      addToPartialResults(partial);<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>      // Exclude the last result, it's a partial<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      addResultsToList(resultsToAddToCache, resultsFromServer, 0, resultsFromServer.length - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    } else if (!partialResults.isEmpty()) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      for (int i = 0; i &lt; resultsFromServer.length; i++) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        Result result = resultsFromServer[i];<a name="line.651"></a>
+<span class="sourceLineNo">626</span>    // 2. !partialResults.isEmpty()<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    // Since our partialResults list is not empty it means that we have been accumulating partial<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    // Results for a particular row. We cannot form the complete/whole Result for that row until<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    // all partials for the row have been received. Thus we loop through all of the Results<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    // returned from the server and determine whether or not all partial Results for the row have<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    // been received. We know that we have received all of the partial Results for the row when:<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    // i) We notice a row change in the Results<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    // ii) We see a Result for the partial row that is NOT marked as a partial Result<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    //<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    // 3. (partial == null &amp;&amp; partialResults.isEmpty())<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    // Business as usual. We are not accumulating partial results and there wasn't a partial result<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    // in the RPC response. This means that all of the results we received from the server are<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    // complete and can be added directly to the cache<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (partial != null &amp;&amp; partialResults.isEmpty()) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      addToPartialResults(partial);<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      // Exclude the last result, it's a partial<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      addResultsToList(resultsToAddToCache, resultsFromServer, 0, resultsFromServer.length - 1);<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    } else if (!partialResults.isEmpty()) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      for (int i = 0; i &lt; resultsFromServer.length; i++) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        Result result = resultsFromServer[i];<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>        // This result is from the same row as the partial Results. Add it to the list of partials<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        // and check if it was the last partial Result for that row<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        if (Bytes.equals(partialResultsRow, result.getRow())) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>          addToPartialResults(result);<a name="line.651"></a>
 <span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>        // This result is from the same row as the partial Results. Add it to the list of partials<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // and check if it was the last partial Result for that row<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (Bytes.equals(partialResultsRow, result.getRow())) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          addToPartialResults(result);<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>          // If the result is not a partial, it is a signal to us that it is the last Result we<a name="line.658"></a>
-<span class="sourceLineNo">659</span>          // need to form the complete Result client-side<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!result.isPartial()) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            resultsToAddToCache.add(Result.createCompleteResult(partialResults));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            clearPartialResults();<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        } else {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // The row of this result differs from the row of the partial results we have received so<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          // far. If our list of partials isn't empty, this is a signal to form the complete Result<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          // since the row has now changed<a name="line.667"></a>
-<span class="sourceLineNo">668</span>          if (!partialResults.isEmpty()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>            resultsToAddToCache.add(Result.createCompleteResult(partialResults));<a name="line.669"></a>
-<span class="sourceLineNo">670</span>            clearPartialResults();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>          // It's possible that in one response from the server we receive the final partial for<a name="line.673"></a>
-<span class="sourceLineNo">674</span>          // one row and receive a partial for a different row. Thus, make sure that all Results<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          // are added to the proper list<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          if (result.isPartial()) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>            addToPartialResults(result);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          } else {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            resultsToAddToCache.add(result);<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>    } else { // partial == null &amp;&amp; partialResults.isEmpty() -- business as usual<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      addResultsToList(resultsToAddToCache, resultsFromServer, 0, resultsFromServer.length);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>    return resultsToAddToCache;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * A convenience method for adding a Result to our list of partials. This method ensure that only<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * Results that belong to the same row as the other partials can be added to the list.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @param result The result that we want to add to our list of partial Results<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * @throws IOException<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  private void addToPartialResults(final Result result) throws IOException {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    final byte[] row = result.getRow();<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (partialResultsRow != null &amp;&amp; !Bytes.equals(row, partialResultsRow)) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      throw new IOException("Partial result row does not match. All partial results must come "<a name="line.699"></a>
-<span class="sourceLineNo">700</span>          + "from the same row. partialResultsRow: " + Bytes.toString(partialResultsRow) + "row: "<a name="line.700"></a>
-<span class="sourceLineNo">701</span>          + Bytes.toString(row));<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    partialResultsRow = row;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    partialResults.add(result);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Convenience method for clearing the list of partials and resetting the partialResultsRow.<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
-<span class="sourceLineNo">710</span>  private void clearPartialResults() {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    partialResults.clear();<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    partialResultsRow = null;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  /**<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   * Helper method for adding results between the indices [start, end) to the outputList<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @param outputList the list that results will be added to<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   * @param inputArray the array that results are taken from<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   * @param start beginning index (inclusive)<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @param end ending index (exclusive)<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   */<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  private void addResultsToList(List&lt;Result&gt; outputList, Result[] inputArray, int start, int end) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    if (inputArray == null || start &lt; 0 || end &gt; inputArray.length) return;<a name="line.723"></a>
+<span class="sourceLineNo">653</span>          // If the result is not a partial, it is a signal to us that it is the last Result we<a name="line.653"></a>
+<span class="sourceLineNo">654</span>          // need to form the complete Result client-side<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          if (!result.isPartial()) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>            resultsToAddToCache.add(Result.createCompleteResult(partialResults));<a name="line.656"></a>
+<span class="sourceLineNo">657</span>            clearPartialResults();<a name="line.657"></a>
+<span class="sourceLineNo">658</span>          }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>          // The row of this result differs from the row of the partial results we have received so<a name="line.660"></a>
+<span class="sourceLineNo">661</span>          // far. If our list of partials isn't empty, this is a signal to form the complete Result<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // since the row has now changed<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          if (!partialResults.isEmpty()) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>            resultsToAddToCache.add(Result.createCompleteResult(partialResults));<a name="line.664"></a>
+<span class="sourceLineNo">665</span>            clearPartialResults();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>          // It's possible that in one response from the server we receive the final partial for<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          // one row and receive a partial for a different row. Thus, make sure that all Results<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // are added to the proper list<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          if (result.isPartial()) {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>            addToPartialResults(result);<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          } else {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            resultsToAddToCache.add(result);<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>      }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    } else { // partial == null &amp;&amp; partialResults.isEmpty() -- business as usual<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      addResultsToList(resultsToAddToCache, resultsFromServer, 0, resultsFromServer.length);<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>    return resultsToAddToCache;<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  }<a name="line.683"></a>
+<span class="sourceLineNo">684</span><a name="line.684"></a>
+<span class="sourceLineNo">685</span>  /**<a name="line.685"></a>
+<span class="sourceLineNo">686</span>   * A convenience method for adding a Result to our list of partials. This method ensure that only<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * Results that belong to the same row as the other partials can be added to the list.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   * @param result The result that we want to add to our list of partial Results<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   * @throws IOException<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private void addToPartialResults(final Result result) throws IOException {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    final byte[] row = result.getRow();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    if (partialResultsRow != null &amp;&amp; !Bytes.equals(row, partialResultsRow)) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      throw new IOException("Partial result row does not match. All partial results must come "<a name="line.694"></a>
+<span class="sourceLineNo">695</span>          + "from the same row. partialResultsRow: " + Bytes.toString(partialResultsRow) + "row: "<a name="line.695"></a>
+<span class="sourceLineNo">696</span>          + Bytes.toString(row));<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    partialResultsRow = row;<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    partialResults.add(result);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
+<span class="sourceLineNo">703</span>   * Convenience method for clearing the list of partials and resetting the partialResultsRow.<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   */<a name="line.704"></a>
+<span class="sourceLineNo">705</span>  private void clearPartialResults() {<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    partialResults.clear();<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    partialResultsRow = null;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>  }<a name="line.708"></a>
+<span class="sourceLineNo">709</span><a name="line.709"></a>
+<span class="sourceLineNo">710</span>  /**<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   * Helper method for adding results between the indices [start, end) to the outputList<a name="line.711"></a>
+<span class="sourceLineNo">712</span>   * @param outputList the list that results will be added to<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * @param inputArray the array that results are taken from<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * @param start beginning index (inclusive)<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param end ending index (exclusive)<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   */<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  private void addResultsToList(List&lt;Result&gt; outputList, Result[] inputArray, int start, int end) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    if (inputArray == null || start &lt; 0 || end &gt; inputArray.length) return;<a name="line.718"></a>
+<span class="sourceLineNo">719</span><a name="line.719"></a>
+<span class="sourceLineNo">720</span>    for (int i = start; i &lt; end; i++) {<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      outputList.add(inputArray[i]);<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    }<a name="line.722"></a>
+<span class="sourceLineNo">723</span>  }<a name="line.723"></a>
 <span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>    for (int i = start; i &lt; end; i++) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      outputList.add(inputArray[i]);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>    @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    public void close() {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      if (!scanMetricsPublished) writeScanMetrics();<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      if (callable != null) {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        callable.setClose();<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        try {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          call(callable, caller, scannerTimeout);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        } catch (UnknownScannerException e) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>           // We used to catch this error, interpret, and rethrow. However, we<a name="line.738"></a>
-<span class="sourceLineNo">739</span>           // have since decided that it's not nice for a scanner's close to<a name="line.739"></a>
-<span class="sourceLineNo">740</span>           // throw exceptions. Chances are it was just due to lease time out.<a name="line.740"></a>
-<span class="sourceLineNo">741</span>          if (LOG.isDebugEnabled()) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            LOG.debug("scanner failed to close", e);<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        } catch (IOException e) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>          /* An exception other than UnknownScanner is unexpected. */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>          LOG.warn("scanner failed to close.", e);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        callable = null;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      }<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      closed = true;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    }<a name="line.751"></a>
-<span class="sourceLineNo">752</span><a name="line.752"></a>
-<span class="sourceLineNo">753</span>  /**<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * Create the closest row before the specified row<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   * @param row<a name="line.755"></a>
-<span class="sourceLineNo">756</span>   * @return a new byte array which is the closest front row of the specified one<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   */<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  protected static byte[] createClosestRowBefore(byte[] row) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    if (row == null) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      throw new IllegalArgumentException("The passed row is empty");<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    }<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    if (Bytes.equals(row, HConstants.EMPTY_BYTE_ARRAY)) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      return MAX_BYTE_ARRAY;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    if (row[row.length - 1] == 0) {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      return Arrays.copyOf(row, row.length - 1);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    } else {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      byte[] closestFrontRow = Arrays.copyOf(row, row.length);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      closestFrontRow[row.length - 1] = (byte) ((closestFrontRow[row.length - 1] &amp; 0xff) - 1);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      closestFrontRow = Bytes.add(closestFrontRow, MAX_BYTE_ARRAY);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      return closestFrontRow;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>  }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>  @Override<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  public boolean renewLease() {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    if (callable != null) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // do not return any rows, do not advance the scanner<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      callable.setRenew(true);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      try {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        this.caller.callWithoutRetries(callable, this.scannerTimeout);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      } catch (Exception e) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      } finally {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        callable.setRenew(false);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      return true;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    return false;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>}<a name="line.791"></a>
+<span class="sourceLineNo">725</span>    @Override<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    public void close() {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      if (!scanMetricsPublished) writeScanMetrics();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (callable != null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        callable.setClose();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>        try {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>          call(callable, caller, scannerTimeout);<a name="line.731"></a>
+<span class="sourceLineNo">732</span>        } catch (UnknownScannerException e) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>           // We used to catch this error, interpret, and rethrow. However, we<a name="line.733"></a>
+<span class="sourceLineNo">734</span>           // have since decided that it's not nice for a scanner's close to<a name="line.734"></a>
+<span class="sourceLineNo">735</span>           // throw exceptions. Chances are it was just due to lease time out.<a name="line.735"></a>
+<span class="sourceLineNo">736</span>          if (LOG.isDebugEnabled()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span>            LOG.debug("scanner failed to close", e);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>          }<a name="line.738"></a>
+<span class="sourceLineNo">739</span>        } catch (IOException e) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>          /* An exception other than UnknownScanner is unexpected. */<a name="line.740"></a>
+<span class="sourceLineNo">741</span>          LOG.warn("scanner failed to close.", e);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>        }<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        callable = null;<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      }<a name="line.744"></a>
+<span class="sourceLineNo">745</span>      closed = true;<a name="line.745"></a>
+<span class="sourceLineNo">746</span>    }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Create the closest row before the specified row<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @param row<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @return a new byte array which is the closest front row of the specified one<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   */<a name="line.752"></a>
+<span class="sourceLineNo">753</span>  protected static byte[] createClosestRowBefore(byte[] row) {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    if (row == null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>      throw new IllegalArgumentException("The passed row is empty");<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    if (Bytes.equals(row, HConstants.EMPTY_BYTE_ARRAY)) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      return MAX_BYTE_ARRAY;<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    if (row[row.length - 1] == 0) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      return Arrays.copyOf(row, row.length - 1);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>    } else {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      byte[] closestFrontRow = Arrays.copyOf(row, row.length);<a name="line.763"></a>
+<span class="sourceLineNo">764</span>      closestFrontRow[row.length - 1] = (byte) ((closestFrontRow[row.length - 1] &amp; 0xff) - 1);<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      closestFrontRow = Bytes.add(closestFrontRow, MAX_BYTE_ARRAY);<a name="line.765"></a>
+<span class="sourceLineNo">766</span>      return closestFrontRow;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    }<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>  @Override<a name="line.770"></a>
+<span class="sourceLineNo">771</span>  public boolean renewLease() {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    if (callable != null) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      // do not return any rows, do not advance the scanner<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      callable.setRenew(true);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      try {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        this.caller.callWithoutRetries(callable, this.scannerTimeout);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>      } catch (Exception e) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>        return false;<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      } finally {<a name="line.779"></a>
+<span class="sourceLineNo">780</span>        callable.setRenew(false);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      }<a name="line.781"></a>
+<span class="sourceLineNo">782</span>      return true;<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    return false;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
+<span class="sourceLineNo">786</span>}<a name="line.786"></a>
 
 
 


[20/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
index 86e70cd..fc20ec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -616,7 +616,7 @@
 <span class="sourceLineNo">608</span>   * region servers and the masters.  It makes each region's state in HDFS, in<a name="line.608"></a>
 <span class="sourceLineNo">609</span>   * hbase:meta, and deployments consistent.<a name="line.609"></a>
 <span class="sourceLineNo">610</span>   *<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * @return If &gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
+<span class="sourceLineNo">611</span>   * @return If &amp;gt; 0 , number of errors detected, if &amp;lt; 0 there was an unrecoverable<a name="line.611"></a>
 <span class="sourceLineNo">612</span>   *     error.  If 0, we have a clean hbase.<a name="line.612"></a>
 <span class="sourceLineNo">613</span>   */<a name="line.613"></a>
 <span class="sourceLineNo">614</span>  public int onlineConsistencyRepair() throws IOException, KeeperException,<a name="line.614"></a>
@@ -2134,7 +2134,7 @@
 <span class="sourceLineNo">2126</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2126"></a>
 <span class="sourceLineNo">2127</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master<a name="line.2129"></a>
+<span class="sourceLineNo">2129</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span>   * restart or failover may be required.<a name="line.2130"></a>
 <span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2132"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/distribution-management.html
----------------------------------------------------------------------
diff --git a/distribution-management.html b/distribution-management.html
index 9662cde..f941a13 100644
--- a/distribution-management.html
+++ b/distribution-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Distribution Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 83028b8..7e83939 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -330,7 +330,7 @@ for more details.</p>
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index 0f3b86d..dd0e688 100644
--- a/hbase-annotations/checkstyle.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependencies.html b/hbase-annotations/dependencies.html
index 08c0d6e..6f62765 100644
--- a/hbase-annotations/dependencies.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-convergence.html b/hbase-annotations/dependency-convergence.html
index ad82028..e98a5f6 100644
--- a/hbase-annotations/dependency-convergence.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-info.html b/hbase-annotations/dependency-info.html
index ef27aa4..857e21d 100644
--- a/hbase-annotations/dependency-info.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-management.html b/hbase-annotations/dependency-management.html
index c4538a1..16b5714 100644
--- a/hbase-annotations/dependency-management.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/distribution-management.html b/hbase-annotations/distribution-management.html
index 65c9c67..28eb7ed 100644
--- a/hbase-annotations/distribution-management.html
+++ b/hbase-annotations/distribution-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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/index.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/index.html b/hbase-annotations/index.html
index 572abaa..3576508 100644
--- a/hbase-annotations/index.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index 7287d84..8735026 100644
--- a/hbase-annotations/integration.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/issue-tracking.html b/hbase-annotations/issue-tracking.html
index 7050660..c17a945 100644
--- a/hbase-annotations/issue-tracking.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/license.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/license.html b/hbase-annotations/license.html
index 6451bae..87b81df 100644
--- a/hbase-annotations/license.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/mail-lists.html b/hbase-annotations/mail-lists.html
index f91e4fc..06dc753 100644
--- a/hbase-annotations/mail-lists.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugin-management.html b/hbase-annotations/plugin-management.html
index 5f80f5b..310fc74 100644
--- a/hbase-annotations/plugin-management.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugins.html b/hbase-annotations/plugins.html
index dfb5d4f..152865a 100644
--- a/hbase-annotations/plugins.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-info.html b/hbase-annotations/project-info.html
index 984c6c7..0b05579 100644
--- a/hbase-annotations/project-info.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-reports.html b/hbase-annotations/project-reports.html
index 49844f6..9898ed5 100644
--- a/hbase-annotations/project-reports.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-summary.html b/hbase-annotations/project-summary.html
index a112745..a12361d 100644
--- a/hbase-annotations/project-summary.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/source-repository.html b/hbase-annotations/source-repository.html
index 3d07bbd..7759cd6 100644
--- a/hbase-annotations/source-repository.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-annotations/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/team-list.html b/hbase-annotations/team-list.html
index 9a71cb8..248f4ca 100644
--- a/hbase-annotations/team-list.html
+++ b/hbase-annotations/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependencies.html b/hbase-archetypes/dependencies.html
index e57bdd1..a3ab142 100644
--- a/hbase-archetypes/dependencies.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-convergence.html b/hbase-archetypes/dependency-convergence.html
index 9212e50..2b7fb89 100644
--- a/hbase-archetypes/dependency-convergence.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-info.html b/hbase-archetypes/dependency-info.html
index 0b6a490..f926cf6 100644
--- a/hbase-archetypes/dependency-info.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-management.html b/hbase-archetypes/dependency-management.html
index 8a21619..ef3091d 100644
--- a/hbase-archetypes/dependency-management.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/distribution-management.html b/hbase-archetypes/distribution-management.html
index 0066d0d..1c0d30b 100644
--- a/hbase-archetypes/distribution-management.html
+++ b/hbase-archetypes/distribution-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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 43b8b84..195da02 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 c0e2abe..69b3eba 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 eb9b9b9..509c8ee 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 943a462..586920b 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/hbase-archetype-builder/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/distribution-management.html b/hbase-archetypes/hbase-archetype-builder/distribution-management.html
index 69c58bc..9cc4590 100644
--- a/hbase-archetypes/hbase-archetype-builder/distribution-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/distribution-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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 67da467..feb686f 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 04b473e..16c5b87 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 344ad38..191532f 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 ff84eea..ed86ef3 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 7065b00..0beaad2 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 e52ad81..dc92645 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 de6d57c..0e05d89 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 21a736d..e101add 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 7d04f42..c6c511f 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 f5e802a..017aa80 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 d0fb666..4eab0fe 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 56e0911..f9ce97f 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 9d7bc32..eb7fe45 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 998bfbe..7b9e1cb 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 80f4bd6..2cda731 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 9d85e72..006f064 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/hbase-client-project/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/distribution-management.html b/hbase-archetypes/hbase-client-project/distribution-management.html
index b155aa0..90d199a 100644
--- a/hbase-archetypes/hbase-client-project/distribution-management.html
+++ b/hbase-archetypes/hbase-client-project/distribution-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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 1d60ba9..1fd213d 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 0535ef9..919f355 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>


[44/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 ef33f77..9e83bca 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -527,7 +527,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completed</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.222">completed</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.223">completed</a></pre>
 <div class="block">Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.
  Once a Root-Procedure completes (success or failure), the result will be added to this map.
  The user of ProcedureExecutor should call getResult(procId) to get the result.</div>
@@ -539,7 +539,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackStack</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.230">rollbackStack</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.231">rollbackStack</a></pre>
 <div class="block">Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.
  The RootProcedureState contains the execution stack of the Root-Procedure,
  It is added to the map by submitProcedure() and removed on procedure completion.</div>
@@ -551,7 +551,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>procedures</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.237">procedures</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.238">procedures</a></pre>
 <div class="block">Helper map to lookup the live procedures by ID.
  This map contains every procedure. root-procedures and subprocedures.</div>
 </li>
@@ -562,7 +562,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceKeysToProcIdsMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.244">nonceKeysToProcIdsMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.245">nonceKeysToProcIdsMap</a></pre>
 <div class="block">Helper map to lookup whether the procedure already issued from the same client.
  This map contains every root procedure.</div>
 </li>
@@ -573,7 +573,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>waitingTimeout</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.html" title="class in org.apache.hadoop.hbase.procedure2.util">TimeoutBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.251">waitingTimeout</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.html" title="class in org.apache.hadoop.hbase.procedure2.util">TimeoutBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.252">waitingTimeout</a></pre>
 <div class="block">Timeout Queue that contains Procedures in a WAITING_TIMEOUT state
  or periodic procedures.</div>
 </li>
@@ -584,7 +584,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>runnables</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureRunnableSet.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureRunnableSet</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.257">runnables</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureRunnableSet.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureRunnableSet</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.258">runnables</a></pre>
 <div class="block">Queue that contains runnable procedures.</div>
 </li>
 </ul>
@@ -594,7 +594,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>submitLock</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.260">submitLock</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.261">submitLock</a></pre>
 </li>
 </ul>
 <a name="lastProcId">
@@ -603,7 +603,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>lastProcId</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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.html#line.261">lastProcId</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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.html#line.262">lastProcId</a></pre>
 </li>
 </ul>
 <a name="listeners">
@@ -612,7 +612,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>listeners</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CopyOnWriteArrayList.html?is-external=true" title="class or interface in java.util.concurrent">CopyOnWriteArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.263">listeners</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CopyOnWriteArrayList.html?is-external=true" title="class or interface in java.util.concurrent">CopyOnWriteArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.264">listeners</a></pre>
 </li>
 </ul>
 <a name="activeExecutorCount">
@@ -621,7 +621,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>activeExecutorCount</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.266">activeExecutorCount</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.267">activeExecutorCount</a></pre>
 </li>
 </ul>
 <a name="running">
@@ -630,7 +630,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>running</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.267">running</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.268">running</a></pre>
 </li>
 </ul>
 <a name="environment">
@@ -639,7 +639,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>environment</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.268">environment</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.269">environment</a></pre>
 </li>
 </ul>
 <a name="store">
@@ -648,7 +648,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>store</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.269">store</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.270">store</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -657,7 +657,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.270">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.271">conf</a></pre>
 </li>
 </ul>
 <a name="threads">
@@ -666,7 +666,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>threads</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.272">threads</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.273">threads</a></pre>
 </li>
 </ul>
 </li>
@@ -685,7 +685,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ProcedureExecutor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.274">ProcedureExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.275">ProcedureExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                  <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&nbsp;environment,
                  <a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;store)</pre>
 </li>
@@ -698,7 +698,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ProcedureExecutor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.279">ProcedureExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.280">ProcedureExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                  <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&nbsp;environment,
                  <a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;store,
                  <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureRunnableSet.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureRunnableSet</a>&nbsp;runqueue)</pre>
@@ -718,7 +718,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.287">load</a>(boolean&nbsp;abortOnCorruption)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.288">load</a>(boolean&nbsp;abortOnCorruption)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -730,7 +730,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>loadProcedures</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.322">loadProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;procIter,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.323">loadProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;procIter,
                   boolean&nbsp;abortOnCorruption)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -743,7 +743,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.478">start</a>(int&nbsp;numThreads,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.479">start</a>(int&nbsp;numThreads,
          boolean&nbsp;abortOnCorruption)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Start the procedure executor.
@@ -762,7 +762,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.527">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.528">stop</a>()</pre>
 </li>
 </ul>
 <a name="join()">
@@ -771,7 +771,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.537">join</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.538">join</a>()</pre>
 </li>
 </ul>
 <a name="isRunning()">
@@ -780,7 +780,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isRunning</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.561">isRunning</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.562">isRunning</a>()</pre>
 </li>
 </ul>
 <a name="getNumThreads()">
@@ -789,7 +789,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumThreads</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.568">getNumThreads</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.569">getNumThreads</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the number of execution threads.</dd></dl>
 </li>
 </ul>
@@ -799,7 +799,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveExecutorCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.572">getActiveExecutorCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.573">getActiveExecutorCount</a>()</pre>
 </li>
 </ul>
 <a name="getEnvironment()">
@@ -808,7 +808,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getEnvironment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.576">getEnvironment</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.577">getEnvironment</a>()</pre>
 </li>
 </ul>
 <a name="getStore()">
@@ -817,7 +817,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.580">getStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.581">getStore</a>()</pre>
 </li>
 </ul>
 <a name="registerListener(org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener)">
@@ -826,7 +826,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>registerListener</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.584">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.585">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
 </li>
 </ul>
 <a name="unregisterListener(org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener)">
@@ -835,7 +835,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterListener</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.588">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.589">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
 </li>
 </ul>
 <a name="listProcedures()">
@@ -844,7 +844,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>listProcedures</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.596">listProcedures</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.597">listProcedures</a>()</pre>
 <div class="block">List procedures.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the procedures in a list</dd></dl>
 </li>
@@ -855,7 +855,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>submitProcedure</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.617">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.618">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 <div class="block">Add a new root-procedure to the executor.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>proc</code> - the new procedure to execute.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>the procedure id, that can be used to monitor the operation</dd></dl>
@@ -867,7 +867,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>submitProcedure</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.628">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.629">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                    long&nbsp;nonceGroup,
                    long&nbsp;nonce)</pre>
 <div class="block">Add a new root-procedure to the executor.</div>
@@ -881,7 +881,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getResult</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.684">getResult</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.685">getResult</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isFinished(long)">
@@ -890,7 +890,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.695">isFinished</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.696">isFinished</a>(long&nbsp;procId)</pre>
 <div class="block">Return true if the procedure is finished.
  The state may be "completed successfully" or "failed and rolledback".
  Use getResult() to check the state or get the result data.</div>
@@ -904,7 +904,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isStarted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.704">isStarted</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.705">isStarted</a>(long&nbsp;procId)</pre>
 <div class="block">Return true if the procedure is started.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>procId</code> - the ID of the procedure to check</dd>
 <dt><span class="strong">Returns:</span></dt><dd>true if the procedure execution is started, otherwise false.</dd></dl>
@@ -916,7 +916,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>removeResult</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.716">removeResult</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.717">removeResult</a>(long&nbsp;procId)</pre>
 <div class="block">Mark the specified completed procedure, as ready to remove.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>procId</code> - the ID of the procedure to remove</dd></dl>
 </li>
@@ -927,7 +927,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.736">abort</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.737">abort</a>(long&nbsp;procId)</pre>
 <div class="block">Send an abort notification the specified procedure.
  Depending on the procedure implementation the abort can be considered or ignored.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>procId</code> - the procedure to abort</dd>
@@ -940,7 +940,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.747">abort</a>(long&nbsp;procId,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.748">abort</a>(long&nbsp;procId,
             boolean&nbsp;mayInterruptIfRunning)</pre>
 <div class="block">Send an abort notification the specified procedure.
  Depending on the procedure implementation the abort can be considered or ignored.</div>
@@ -954,7 +954,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isProcedureOwner</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.766">isProcedureOwner</a>(long&nbsp;procId,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.767">isProcedureOwner</a>(long&nbsp;procId,
                        <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block">Check if the user is this procedure's owner</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>procId</code> - the target procedure</dd><dd><code>user</code> - the user</dd>
@@ -968,7 +968,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getResults</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.784">getResults</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.785">getResults</a>()</pre>
 </li>
 </ul>
 <a name="getProcedure(long)">
@@ -977,7 +977,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.788">getProcedure</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.789">getProcedure</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="getRunnableSet()">
@@ -986,7 +986,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRunnableSet</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureRunnableSet.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureRunnableSet</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.792">getRunnableSet</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureRunnableSet.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureRunnableSet</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.793">getRunnableSet</a>()</pre>
 </li>
 </ul>
 <a name="execLoop()">
@@ -995,7 +995,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>execLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.801">execLoop</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.802">execLoop</a>()</pre>
 <div class="block">Execution loop (N threads)
  while the executor is in a running state,
  fetch a procedure from the runnables queue and start the execution.</div>
@@ -1007,7 +1007,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>execLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.815">execLoop</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.816">execLoop</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="timeoutLoop()">
@@ -1016,7 +1016,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>timeoutLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.888">timeoutLoop</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.883">timeoutLoop</a>()</pre>
 </li>
 </ul>
 <a name="executeRollback(long, org.apache.hadoop.hbase.procedure2.RootProcedureState)">
@@ -1025,7 +1025,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>executeRollback</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.940">executeRollback</a>(long&nbsp;rootProcId,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.935">executeRollback</a>(long&nbsp;rootProcId,
                       <a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack)</pre>
 <div class="block">Execute the rollback of the full procedure stack.
  Once the procedure is rolledback, the root-procedure will be visible as
@@ -1038,7 +1038,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>executeRollback</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1001">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.996">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 <div class="block">Execute the rollback of the procedure step.
  It updates the store with the new state (stack index)
  or will remove completly the procedure in case it is a child.</div>
@@ -1050,7 +1050,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>execProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1057">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1052">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
                  <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
 <div class="block">Executes the specified procedure
   - calls the doExecute() of the procedure
@@ -1075,7 +1075,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>handleInterruptedException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1202">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1199">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>&nbsp;e)</pre>
 </li>
 </ul>
@@ -1085,7 +1085,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sendProcedureLoadedNotification</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1214">sendProcedureLoadedNotification</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1211">sendProcedureLoadedNotification</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="sendProcedureAddedNotification(long)">
@@ -1094,7 +1094,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sendProcedureAddedNotification</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1226">sendProcedureAddedNotification</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1223">sendProcedureAddedNotification</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="sendProcedureFinishedNotification(long)">
@@ -1103,7 +1103,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sendProcedureFinishedNotification</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1238">sendProcedureFinishedNotification</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1235">sendProcedureFinishedNotification</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="nextProcId()">
@@ -1112,7 +1112,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextProcId</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1250">nextProcId</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1247">nextProcId</a>()</pre>
 </li>
 </ul>
 <a name="getRootProcedureId(org.apache.hadoop.hbase.procedure2.Procedure)">
@@ -1121,7 +1121,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootProcedureId</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1265">getRootProcedureId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1262">getRootProcedureId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="procedureFinished(org.apache.hadoop.hbase.procedure2.Procedure)">
@@ -1130,7 +1130,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureFinished</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1269">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1266">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="getResultOrProcedure(long)">
@@ -1139,7 +1139,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getResultOrProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1295">getResultOrProcedure</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1297">getResultOrProcedure</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/procedure2/SequentialProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/SequentialProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/SequentialProcedure.html
index 21b4832..470fde3 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/SequentialProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/SequentialProcedure.html
@@ -203,7 +203,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute(TEnvironment)">execute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner
 ()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/h
 adoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuc
 cess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback(TEnvironment)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildren
 Latch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes
 (java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(jav
 a.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute(TEnvironment)">execute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner
 ()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/h
 adoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuc
 cess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback(TEnvironment)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildren
 Latch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes
 (java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang
 .StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
index bbdf5c3..5b4fc9d 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
@@ -307,7 +307,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../.
 ./../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Proc
 edure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteP
 rocedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setSt
 artTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.pro
 cedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../.
 ./../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Proc
 edure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteP
 rocedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setSt
 artTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">up
 dateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">


[06/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
index e8e86bf..4be7696 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
@@ -25,526 +25,588 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertTrue;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.fail;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.Callable;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.commons.logging.Log;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.commons.logging.LogFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.impl.Log4JLogger;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Put;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Table;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.log4j.Level;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.After;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import com.google.protobuf.RpcController;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import com.google.protobuf.ServiceException;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * accumulated (potentially empty).<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category(MediumTests.class)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestScannerHeartbeatMessages {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private static Table TABLE = null;<a name="line.82"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.Callable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.impl.Log4JLogger;<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.Path;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableName;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Table;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.log4j.Level;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Before;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.BeforeClass;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>import com.google.protobuf.RpcController;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import com.google.protobuf.ServiceException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * accumulated (potentially empty).<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category(MediumTests.class)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>public class TestScannerHeartbeatMessages {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Table configuration<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static int NUM_ROWS = 10;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.91"></a>
+<span class="sourceLineNo">084</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static Table TABLE = null;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Table configuration<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static int NUM_FAMILIES = 3;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.95"></a>
+<span class="sourceLineNo">093</span>  private static int NUM_ROWS = 5;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static int NUM_QUALIFIERS = 3;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.99"></a>
+<span class="sourceLineNo">097</span>  private static int NUM_FAMILIES = 3;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static int VALUE_SIZE = 128;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // message to the client<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // reached<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @BeforeClass<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // Check the timeout condition after every cell<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    TEST_UTIL.startMiniCluster(1);<a name="line.132"></a>
+<span class="sourceLineNo">101</span>  private static int NUM_QUALIFIERS = 3;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static int VALUE_SIZE = 128;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // message to the client<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // reached<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  @BeforeClass<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static void setUpBeforeClass() throws Exception {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.132"></a>
 <span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    ht.put(puts);<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return ht;<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>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param rows<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param families<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param qualifiers<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param value<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      byte[] value) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Put put;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      put = new Put(rows[row]);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          put.add(kv);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      puts.add(put);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return puts;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @AfterClass<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public static void tearDownAfterClass() throws Exception {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Before<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public void setupBeforeTest() throws Exception {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    disableSleeping();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @After<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  public void teardownAfterTest() throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    disableSleeping();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * other due to changing static variables<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 testScannerHeartbeatMessages() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * disabled, the test should throw an exception.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param testCallable<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @throws InterruptedException<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      testCallable.call();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (Exception e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          + ExceptionUtils.getStackTrace(e));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    try {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      testCallable.call();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    } catch (Exception e) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    } finally {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * fetched.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return new Callable&lt;Void&gt;() {<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      public Void call() throws Exception {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // the case where a scan stops on the server side due to a time limit<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        Scan scan = new Scan();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        return null;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    };<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * @throws Exception<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return new Callable&lt;Void&gt;() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Void call() throws Exception {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        // the case where a scan stops on the server side due to a time limit<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        Scan baseScan = new Scan();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // fields may be changed such as start row<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        Scan scanCopy = new Scan(baseScan);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        scanCopy = new Scan(baseScan);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return null;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    };<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * necessary<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * @param scan The scan configuration being tested<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   *          that column family are fetched<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   */<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    disableSleeping();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Result r1 = null;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    Result r2 = null;<a name="line.295"></a>
+<span class="sourceLineNo">134</span>    // Check the timeout condition after every cell<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    TEST_UTIL.startMiniCluster(1);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ht.put(puts);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return ht;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param rows<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param families<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param qualifiers<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param value<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      byte[] value) throws IOException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Put put;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      put = new Put(rows[row]);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          put.add(kv);<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>      puts.add(put);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return puts;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @AfterClass<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static void tearDownAfterClass() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Before<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void setupBeforeTest() throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    disableSleeping();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @After<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void teardownAfterTest() throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    disableSleeping();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * other due to changing static variables<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  @Test<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void testScannerHeartbeatMessages() throws Exception {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    testImportanceOfHeartbeats(testHeartbeatWithSparseFilter());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * disabled, the test should throw an exception.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * @param testCallable<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @throws InterruptedException<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      testCallable.call();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (Exception e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          + ExceptionUtils.getStackTrace(e));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      testCallable.call();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    } catch (Exception e) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } finally {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * fetched.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @throws Exception<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return new Callable&lt;Void&gt;() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      public Void call() throws Exception {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // the case where a scan stops on the server side due to a time limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        Scan scan = new Scan();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return null;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    };<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @throws Exception<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return new Callable&lt;Void&gt;() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      public Void call() throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // the case where a scan stops on the server side due to a time limit<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        Scan baseScan = new Scan();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // fields may be changed such as start row<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        Scan scanCopy = new Scan(baseScan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        scanCopy = new Scan(baseScan);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    };<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static class SparseFilter extends FilterBase{<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        Thread.sleep(SERVER_TIME_LIMIT + 10);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      } catch (InterruptedException e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Thread.currentThread().interrupt();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ?<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          ReturnCode.INCLUDE :<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          ReturnCode.SKIP;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
 <span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    while ((r1 = scanner.next()) != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      r2 = scannerWithHeartbeats.next();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      disableSleeping();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>      assertTrue(r2 != null);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        Result.compareResults(r1, r2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      } catch (Exception e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        fail(e.getMessage());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    scanner.close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    scannerWithHeartbeats.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * is negative then that sleep will be disabled<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param rowSleepTime<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param cfSleepTime<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * Disable the sleeping mechanism server side.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static void disableSleeping() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      super(conf);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf, csm);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return new HeartbeatRPCServices(this);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">297</span>    public static Filter parseFrom(final byte [] pbBytes){<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return new SparseFilter();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Test the case that there is a filter which filters most of cells<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @throws Exception<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Callable&lt;Void&gt; testHeartbeatWithSparseFilter() throws Exception {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return new Callable&lt;Void&gt;() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Void call() throws Exception {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Scan scan = new Scan();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        scan.setFilter(new SparseFilter());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResultScanner scanner = TABLE.getScanner(scan);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        int num = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        while (scanner.next() != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          num++;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertEquals(1, num);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        scanner.close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>        scan = new Scan();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        scan.setFilter(new SparseFilter());<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        scan.setAllowPartialResults(true);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        scanner = TABLE.getScanner(scan);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        num = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        while (scanner.next() != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          num++;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        assertEquals(NUM_FAMILIES * NUM_QUALIFIERS, num);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        scanner.close();<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    };<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * necessary<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @param scan The scan configuration being tested<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   *          that column family are fetched<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws Exception<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    disableSleeping();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    Result r1 = null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    Result r2 = null;<a name="line.357"></a>
 <span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private static boolean heartbeatsEnabled = true;<a name="line.363"></a>
+<span class="sourceLineNo">359</span>    while ((r1 = scanner.next()) != null) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      r2 = scannerWithHeartbeats.next();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      disableSleeping();<a name="line.363"></a>
 <span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public HeartbeatRPCServices(HRegionServer rs) throws IOException {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      super(rs);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public ScanResponse scan(RpcController controller, ScanRequest request) <a name="line.370"></a>
-<span class="sourceLineNo">371</span>        throws ServiceException {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      ScanRequest.Builder builder = ScanRequest.newBuilder(request);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      builder.setClientHandlesHeartbeats(heartbeatsEnabled);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      return super.scan(controller, builder.build());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">365</span>      assertTrue(r2 != null);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        Result.compareResults(r1, r2);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      } catch (Exception e) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        fail(e.getMessage());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    scanner.close();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    scannerWithHeartbeats.close();<a name="line.375"></a>
 <span class="sourceLineNo">376</span>  }<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
 <span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Custom HRegion class that instantiates {@link RegionScanner}s with configurable sleep times<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * between fetches of row Results and/or column family cells. Useful for emulating an instance<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * where the server is taking a long time to process a client's scan request<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static class HeartbeatHRegion extends HRegion {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Row sleeps occur AFTER each row worth of cells is retrieved.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private static int rowSleepTime = DEFAULT_ROW_SLEEP_TIME;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private static boolean sleepBetweenRows = false;<a name="line.386"></a>
+<span class="sourceLineNo">379</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * is negative then that sleep will be disabled<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @param rowSleepTime<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @param cfSleepTime<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // The sleep for column families can be initiated before or after we fetch the cells for the<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    // column family. If the sleep occurs BEFORE then the time limits will be reached inside<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // StoreScanner while we are fetching individual cells. If the sleep occurs AFTER then the time<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // limit will be reached inside RegionScanner after all the cells for a column family have been<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // retrieved.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    private static boolean sleepBeforeColumnFamily = false;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    private static int columnFamilySleepTime = DEFAULT_CF_SLEEP_TIME;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    private static boolean sleepBetweenColumnFamilies = false;<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public HeartbeatHRegion(Path tableDir, WAL wal, FileSystem fs, Configuration confParam,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        HRegionInfo regionInfo, HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    public HeartbeatHRegion(HRegionFileSystem fs, WAL wal, Configuration confParam,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      super(fs, wal, confParam, htd, rsServices);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    private static void columnFamilySleep() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (HeartbeatHRegion.sleepBetweenColumnFamilies) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        try {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          Thread.sleep(HeartbeatHRegion.columnFamilySleepTime);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        } catch (InterruptedException e) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    private static void rowSleep() {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (HeartbeatHRegion.sleepBetweenRows) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          Thread.sleep(HeartbeatHRegion.rowSleepTime);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      } catch (InterruptedException e) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // Instantiate the custom heartbeat region scanners<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        List&lt;KeyValueScanner&gt; additionalScanners, boolean copyCells) throws IOException {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      if (scan.isReversed()) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (scan.getFilter() != null) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          scan.getFilter().setReversed(true);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        return new HeartbeatReversedRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return new HeartbeatRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Custom ReversedRegionScanner that can be configured to sleep between retrievals of row Results<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * and/or column family cells<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private static class HeartbeatReversedRegionScanner extends ReversedRegionScannerImpl {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    HeartbeatReversedRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        HRegion region, boolean copyCells) throws IOException {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      super(scan, additionalScanners, region, copyCells);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      HeartbeatHRegion.rowSleep();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      return moreRows;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.storeHeap = new HeartbeatReversedKVHeap(scanners, region.getCellCompartor());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!joinedScanners.isEmpty()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.joinedHeap = new HeartbeatReversedKVHeap(joinedScanners, region.getCellCompartor());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  /**<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * Custom RegionScanner that can be configured to sleep between retrievals of row Results and/or<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * column family cells<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  private static class HeartbeatRegionScanner extends RegionScannerImpl {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    HeartbeatRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        boolean copyCells) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      region.super(scan, additionalScanners, region, copyCells);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      HeartbeatHRegion.rowSleep();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return moreRows;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>    @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      this.storeHeap = new HeartbeatKVHeap(scanners, region.getCellCompartor());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (!joinedScanners.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.joinedHeap = new HeartbeatKVHeap(joinedScanners, region.getCellCompartor());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  /**<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * Custom KV Heap that can be configured to sleep/wait in between retrievals of column family<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * cells. Useful for testing<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private static final class HeartbeatKVHeap extends KeyValueHeap {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    public HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, CellComparator comparator)<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      super(scanners, comparator);<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>    HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, KVScannerComparator comparator)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        throws IOException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      super(scanners, comparator);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    @Override<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext context)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      boolean moreRows = super.next(result, context);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      if (!HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.515"></a>
+<span class="sourceLineNo">388</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * Disable the sleeping mechanism server side.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private static void disableSleeping() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super(conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      super(conf, csm);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return new HeartbeatRPCServices(this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.424"></a>
+<span class="sourceLineNo">425</s

<TRUNCATED>

[08/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html
new file mode 100644
index 0000000..3cbc9f0
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Before;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertEquals;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import static org.junit.Assert.assertTrue;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, SmallTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestYieldProcedures {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Procedure NULL_PROC = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TestRunQueue procRunnables;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private ProcedureStore procStore;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private HBaseCommonTestingUtility htu;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileSystem fs;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Path testDir;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Path logDir;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Before<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setUp() throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htu = new HBaseCommonTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    testDir = htu.getDataTestDir();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    logDir = new Path(testDir, "proc-logs");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    procRunnables = new TestRunQueue();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        procStore, procRunnables);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @After<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void tearDown() throws IOException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    procExecutor.stop();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    procStore.stop(false);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fs.delete(logDir, true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    final int NUM_STATES = 3;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      procExecutor.submitProcedure(procs[i]);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // verify execution<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int index = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(false, info.isRollback());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      // verify rollback<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertEquals(true, info.isRollback());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // check runnable queue stats<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, procRunnables.size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertEquals(18, procRunnables.addBackCalls);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(15, procRunnables.yieldCalls);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertEquals(19, procRunnables.pollCalls);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(3, procRunnables.completionCalls);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final int NUM_STATES = 3;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    int count = 0;<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertEquals(false, info.isRollback());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      assertEquals(i, info.getStep().ordinal());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      info = proc.getExecutionInfo().get(count++);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      assertEquals(false, info.isRollback());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      assertEquals(i, info.getStep().ordinal());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(true, info.isRollback());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      assertEquals(i, info.getStep().ordinal());<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>      info = proc.getExecutionInfo().get(count++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertEquals(true, info.isRollback());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(i, info.getStep().ordinal());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // check runnable queue stats<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertEquals(0, procRunnables.size());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(12, procRunnables.addBackCalls);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertEquals(11, procRunnables.yieldCalls);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertEquals(13, procRunnables.pollCalls);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public void testYieldException() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    TestYieldProcedure proc = new TestYieldProcedure();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertEquals(6, proc.step);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // check runnable queue stats<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(0, procRunnables.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(6, procRunnables.addBackCalls);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(5, procRunnables.yieldCalls);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    assertEquals(7, procRunnables.pollCalls);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static class TestProcEnv {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    public long nextTimestamp() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return timestamp.incrementAndGet();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public static class TestStateMachineProcedure<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public class ExecutionInfo {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      private final boolean rollback;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      private final long timestamp;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      private final State step;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        this.timestamp = timestamp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        this.step = step;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.rollback = isRollback;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      public State getStep() { return step; }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      public long getTimestamp() { return timestamp; }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public boolean isRollback() { return rollback; }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    private final boolean abortOnFinalStep;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    public TestStateMachineProcedure() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      this(false, false);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return executionInfo;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        throws InterruptedException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final long ts = env.nextTimestamp();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info(getProcId() + " execute step " + state + " ts=" + ts);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      executionInfo.add(new ExecutionInfo(ts, state, false));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Thread.sleep(150);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.debug("THROW INTERRUPT");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        throw new InterruptedException("test interrupt");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      switch (state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        case STATE_1:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          setNextState(State.STATE_2);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          break;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        case STATE_2:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          setNextState(State.STATE_3);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          break;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        case STATE_3:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          if (abortOnFinalStep) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          return Flow.NO_MORE_STATE;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        default:<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          throw new UnsupportedOperationException();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return Flow.HAS_MORE_STATE;<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>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throws InterruptedException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      final long ts = env.nextTimestamp();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      LOG.debug(getProcId() + " rollback state " + state + " ts=" + ts);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      executionInfo.add(new ExecutionInfo(ts, state, true));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Thread.sleep(150);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("THROW INTERRUPT");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        throw new InterruptedException("test interrupt");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      switch (state) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        case STATE_1:<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          break;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        case STATE_2:<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          break;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        case STATE_3:<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          break;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        default:<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          throw new UnsupportedOperationException();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    protected State getState(final int stateId) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return State.values()[stateId];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    protected int getStateId(final State state) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return state.ordinal();<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>    @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    protected State getInitialState() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return State.STATE_1;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return true;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    protected boolean abort(TestProcEnv env) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      aborted.set(true);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static class TestYieldProcedure extends Procedure&lt;TestProcEnv&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private int step = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public TestYieldProcedure() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>    @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    protected Procedure[] execute(final TestProcEnv env) throws ProcedureYieldException {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.info("execute step " + step);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (step++ &lt; 5) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        throw new ProcedureYieldException();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return null;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected void rollback(TestProcEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected boolean abort(TestProcEnv env) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    protected boolean isYieldAfterExecutionStep(final TestProcEnv env) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return true;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    protected void serializeStateData(final OutputStream stream) throws IOException {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    @Override<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    protected void deserializeStateData(final InputStream stream) throws IOException {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private static class TestRunQueue extends ProcedureSimpleRunQueue {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    private int completionCalls;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    private int addFrontCalls;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    private int addBackCalls;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private int yieldCalls;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private int pollCalls;<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public TestRunQueue() {}<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public void addFront(final Procedure proc) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        addFrontCalls++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        super.addFront(proc);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      public void addBack(final Procedure proc) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        addBackCalls++;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        super.addBack(proc);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>      @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      public void yield(final Procedure proc) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        yieldCalls++;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        super.yield(proc);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      public Procedure poll() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        pollCalls++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return super.poll();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      public void completionCleanup(Procedure proc) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        completionCalls++;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>}<a name="line.383"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[16/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
index e17fd9b..5f73912 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
-<li>Next Class</li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" target="_top">Frames</a></li>
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.162">TestYieldProcedures.TestStateMachineProcedure.State</a>
+<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.188">TestYieldProcedures.TestStateMachineProcedure.State</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&gt;</pre>
 </li>
 </ul>
@@ -199,7 +199,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>STATE_1</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.162">STATE_1</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.188">STATE_1</a></pre>
 </li>
 </ul>
 <a name="STATE_2">
@@ -208,7 +208,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>STATE_2</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.162">STATE_2</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.188">STATE_2</a></pre>
 </li>
 </ul>
 <a name="STATE_3">
@@ -217,7 +217,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>STATE_3</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.162">STATE_3</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.188">STATE_3</a></pre>
 </li>
 </ul>
 </li>
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.162">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.188">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -251,7 +251,7 @@ for (TestYieldProcedures.TestStateMachineProcedure.State c : TestYieldProcedures
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.162">valueOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#line.188">valueOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 
@@ -290,7 +290,7 @@ not permitted.)</div>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
-<li>Next Class</li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
index 41f28bb..7136166 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -113,7 +113,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.160">TestYieldProcedures.TestStateMachineProcedure</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.186">TestYieldProcedures.TestStateMachineProcedure</a>
 extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&gt;</pre>
 </li>
 </ul>
@@ -263,7 +263,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -292,7 +292,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>executionInfo</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.180">executionInfo</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.206">executionInfo</a></pre>
 </li>
 </ul>
 <a name="aborted">
@@ -301,7 +301,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>aborted</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.181">aborted</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.207">aborted</a></pre>
 </li>
 </ul>
 <a name="throwInterruptOnceOnEachStep">
@@ -310,7 +310,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>throwInterruptOnceOnEachStep</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.182">throwInterruptOnceOnEachStep</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.208">throwInterruptOnceOnEachStep</a></pre>
 </li>
 </ul>
 <a name="abortOnFinalStep">
@@ -319,7 +319,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockListLast">
 <li class="blockList">
 <h4>abortOnFinalStep</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.183">abortOnFinalStep</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.209">abortOnFinalStep</a></pre>
 </li>
 </ul>
 </li>
@@ -336,7 +336,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>TestYieldProcedures.TestStateMachineProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.185">TestYieldProcedures.TestStateMachineProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.211">TestYieldProcedures.TestStateMachineProcedure</a>()</pre>
 </li>
 </ul>
 <a name="TestYieldProcedures.TestStateMachineProcedure(boolean, boolean)">
@@ -345,7 +345,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestYieldProcedures.TestStateMachineProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.189">TestYieldProcedures.TestStateMachineProcedure</a>(boolean&nbsp;abortOnFinalStep,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.215">TestYieldProcedures.TestStateMachineProcedure</a>(boolean&nbsp;abortOnFinalStep,
                                              boolean&nbsp;throwInterruptOnceOnEachStep)</pre>
 </li>
 </ul>
@@ -363,7 +363,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>getExecutionInfo</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.195">getExecutionInfo</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.221">getExecutionInfo</a>()</pre>
 </li>
 </ul>
 <a name="executeFromState(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv, org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestStateMachineProcedure.State)">
@@ -372,7 +372,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>executeFromState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.200">executeFromState</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
+<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.226">executeFromState</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
                                                                              <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;state)
                                                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -388,7 +388,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.230">rollbackState</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.257">rollbackState</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
                  <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;state)
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -404,7 +404,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.254">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.282">getState</a>(int&nbsp;stateId)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getState</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&gt;</code></dd>
@@ -417,7 +417,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.259">getStateId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.287">getStateId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;state)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getStateId</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&gt;</code></dd>
@@ -430,7 +430,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.264">getInitialState</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.292">getInitialState</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getInitialState</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&gt;</code></dd>
@@ -443,7 +443,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockList">
 <li class="blockList">
 <h4>isYieldBeforeExecuteFromState</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.269">isYieldBeforeExecuteFromState</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.297">isYieldBeforeExecuteFromState</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
                                     <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;state)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -457,7 +457,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <ul class="blockListLast">
 <li class="blockList">
 <h4>abort</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.274">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.302">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>abort</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</code></dd>
@@ -490,7 +490,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html
new file mode 100644
index 0000000..e61640b
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html
@@ -0,0 +1,407 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestYieldProcedures.TestYieldProcedure (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="TestYieldProcedures.TestYieldProcedure (Apache HBase 2.0.0-SNAPSHOT Test API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestYieldProcedures.TestYieldProcedure.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" target="_top">Frames</a></li>
+<li><a href="TestYieldProcedures.TestYieldProcedure.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2</div>
+<h2 title="Class TestYieldProcedures.TestYieldProcedure" class="title">Class TestYieldProcedures.TestYieldProcedure</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestYieldProcedure</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;org.apache.hadoop.hbase.procedure2.Procedure&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.308">TestYieldProcedures.TestYieldProcedure</a>
+extends org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#step">step</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#TestYieldProcedures.TestYieldProcedure()">TestYieldProcedures.TestYieldProcedure</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#abort(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">abort</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.procedure2.Procedure[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#execute(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">execute</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#isYieldAfterExecutionStep(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">isYieldAfterExecutionStep</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#rollback(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">rollback</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#serializeStateData(java.io.OutputStream)">serializeStateData</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.procedure2.Procedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="step">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>step</h4>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.309">step</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestYieldProcedures.TestYieldProcedure()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestYieldProcedures.TestYieldProcedure</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.311">TestYieldProcedures.TestYieldProcedure</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="execute(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>execute</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.Procedure[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.315">execute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)
+                                                          throws org.apache.hadoop.hbase.procedure2.ProcedureYieldException</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>execute</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code>org.apache.hadoop.hbase.procedure2.ProcedureYieldException</code></dd></dl>
+</li>
+</ul>
+<a name="rollback(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rollback</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.324">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>rollback</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="abort(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>abort</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.328">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>abort</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="isYieldAfterExecutionStep(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isYieldAfterExecutionStep</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.333">isYieldAfterExecutionStep</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code>isYieldAfterExecutionStep</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="serializeStateData(java.io.OutputStream)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serializeStateData</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.338">serializeStateData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)
+                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>serializeStateData</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="deserializeStateData(java.io.InputStream)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>deserializeStateData</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#line.342">deserializeStateData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)
+                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>deserializeStateData</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt;</code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestYieldProcedures.TestYieldProcedure.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" target="_top">Frames</a></li>
+<li><a href="TestYieldProcedures.TestYieldProcedure.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
index dd5fb07..eed9b4c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.44">TestYieldProcedures</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.46">TestYieldProcedures</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -120,9 +120,17 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></strong></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -167,10 +175,14 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#procExecutor">procExecutor</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#procRunnables">procRunnables</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.procedure2.store.ProcedureStore</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#procStore">procStore</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#testDir">testDir</a></strong></code>&nbsp;</td>
 </tr>
@@ -220,6 +232,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#testYieldException()">testYieldException</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#testYieldOnInterrupt()">testYieldOnInterrupt</a></strong>()</code>&nbsp;</td>
 </tr>
 </table>
@@ -250,7 +266,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.45">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.47">LOG</a></pre>
 </li>
 </ul>
 <a name="PROCEDURE_EXECUTOR_SLOTS">
@@ -259,7 +275,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>PROCEDURE_EXECUTOR_SLOTS</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.47">PROCEDURE_EXECUTOR_SLOTS</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.49">PROCEDURE_EXECUTOR_SLOTS</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.TestYieldProcedures.PROCEDURE_EXECUTOR_SLOTS">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -269,7 +285,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>NULL_PROC</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.procedure2.Procedure <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.48">NULL_PROC</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.procedure2.Procedure <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.50">NULL_PROC</a></pre>
 </li>
 </ul>
 <a name="procExecutor">
@@ -278,7 +294,16 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>procExecutor</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.50">procExecutor</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.52">procExecutor</a></pre>
+</li>
+</ul>
+<a name="procRunnables">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>procRunnables</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.53">procRunnables</a></pre>
 </li>
 </ul>
 <a name="procStore">
@@ -287,7 +312,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>procStore</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.ProcedureStore <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.51">procStore</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.ProcedureStore <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.54">procStore</a></pre>
 </li>
 </ul>
 <a name="htu">
@@ -296,7 +321,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>htu</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.53">htu</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.56">htu</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -305,7 +330,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.54">fs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.57">fs</a></pre>
 </li>
 </ul>
 <a name="testDir">
@@ -314,7 +339,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.55">testDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.58">testDir</a></pre>
 </li>
 </ul>
 <a name="logDir">
@@ -323,7 +348,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.56">logDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.59">logDir</a></pre>
 </li>
 </ul>
 </li>
@@ -340,7 +365,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestYieldProcedures</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.44">TestYieldProcedures</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.46">TestYieldProcedures</a>()</pre>
 </li>
 </ul>
 </li>
@@ -357,7 +382,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.59">setUp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.62">setUp</a>()
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -369,7 +394,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.73">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.78">tearDown</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -381,7 +406,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testYieldEachExecutionStep</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.80">testYieldEachExecutionStep</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.85">testYieldEachExecutionStep</a>()
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -390,15 +415,24 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="testYieldOnInterrupt()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testYieldOnInterrupt</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.121">testYieldOnInterrupt</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.124">testYieldOnInterrupt</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
 </li>
 </ul>
+<a name="testYieldException()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testYieldException</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.164">testYieldException</a>()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestProcEnv.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestProcEnv.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestProcEnv.html
index 35602f3..5a3b92d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestProcEnv.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestProcEnv.html
@@ -112,15 +112,31 @@
 <td class="colLast"><span class="strong">TestYieldProcedures.TestStateMachineProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#abort(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">abort</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="strong">TestYieldProcedures.TestYieldProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#abort(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">abort</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.procedure2.Procedure[]</code></td>
+<td class="colLast"><span class="strong">TestYieldProcedures.TestYieldProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#execute(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">execute</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow</code></td>
 <td class="colLast"><span class="strong">TestYieldProcedures.TestStateMachineProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#executeFromState(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv,%20org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestStateMachineProcedure.State)">executeFromState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
                                 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="strong">TestYieldProcedures.TestYieldProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#isYieldAfterExecutionStep(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">isYieldAfterExecutionStep</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="strong">TestYieldProcedures.TestStateMachineProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#isYieldBeforeExecuteFromState(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv,%20org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestStateMachineProcedure.State)">isYieldBeforeExecuteFromState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,
                                                           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="strong">TestYieldProcedures.TestYieldProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#rollback(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">rollback</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">TestYieldProcedures.TestStateMachineProcedure.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#rollbackState(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv,%20org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestStateMachineProcedure.State)">rollbackState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;env,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestRunQueue.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestRunQueue.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestRunQueue.html
new file mode 100644
index 0000000..099a571
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestRunQueue.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestRunQueue (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestRunQueue (Apache HBase 2.0.0-SNAPSHOT Test API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestRunQueue.html" target="_top">Frames</a></li>
+<li><a href="TestYieldProcedures.TestRunQueue.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestRunQueue" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestRunQueue</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a> in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></code></td>
+<td class="colLast"><span class="strong">TestYieldProcedures.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#procRunnables">procRunnables</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestRunQueue.html" target="_top">Frames</a></li>
+<li><a href="TestYieldProcedures.TestRunQueue.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[31/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a 

<TRUNCATED>

[24/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5699"></a>
+<s

<TRUNCATED>

[50/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 875cb1e..522fe5a 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -283,7 +283,7 @@
 <td>1695</td>
 <td>0</td>
 <td>0</td>
-<td>12630</td></tr></table></div>
+<td>12629</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -661,7 +661,7 @@
 <td><a href="#org.apache.hadoop.hbase.client.ClientScanner.java">org/apache/hadoop/hbase/client/ClientScanner.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>209</td></tr>
+<td>208</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ClientSimpleScanner.java">org/apache/hadoop/hbase/client/ClientSimpleScanner.java</a></td>
 <td>0</td>
@@ -6105,7 +6105,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#MethodLength">MethodLength</a></td>
-<td>34</td>
+<td>33</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>whitespace</td>
@@ -13368,182 +13368,176 @@
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L368">368</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>MethodLength</td>
-<td>Method length is 153 lines (max allowed is 150).</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L378">378</a></td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L380">380</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L442">442</a></td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L533">533</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L438">438</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L534">534</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L528">528</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L535">535</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L529">529</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L573">573</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L530">530</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L694">694</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L568">568</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L689">689</a></td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L723">723</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L718">718</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 4, expected level should be 2.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L730">730</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L725">725</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L732">732</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L727">727</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L732">732</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L727">727</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L733">733</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L728">728</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L734">734</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L729">729</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L735">735</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L730">730</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 10, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L736">736</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L731">731</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L737">737</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L732">732</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L741">741</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L736">736</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L742">742</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L737">737</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L743">743</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L738">738</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L744">744</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L739">739</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 10, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L746">746</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L741">741</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L747">747</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L742">742</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L748">748</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L743">743</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L749">749</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L744">744</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L750">750</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L745">745</a></td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 4, expected level should be 2.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L751">751</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L746">746</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L755">755</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/client/ClientScanner.html#L750">750</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClientSimpleScanner.java">org/apache/hadoop/hbase/client/ClientSimpleScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -13552,31 +13546,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClientSmallReversedScanner.java">org/apache/hadoop/hbase/client/ClientSmallReversedScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallReversedScanner.html#L39">39</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallReversedScanner.html#L125">125</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallReversedScanner.html#L131">131</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -13585,43 +13579,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClientSmallScanner.java">org/apache/hadoop/hbase/client/ClientSmallScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallScanner.html#L40">40</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallScanner.html#L111">111</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallScanner.html#L132">132</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallScanner.html#L136">136</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClientSmallScanner.html#L189">189</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -13630,97 +13624,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClusterConnection.java">org/apache/hadoop/hbase/client/ClusterConnection.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L75">75</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L92">92</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L110">110</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L124">124</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L148">148</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L159">159</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L171">171</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L185">185</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L198">198</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 1, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L200">200</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L212">212</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L223">223</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L255">255</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ClusterConnection.html#L264">264</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -13729,13 +13723,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClusterStatusListener.java">org/apache/hadoop/hbase/client/ClusterStatusListener.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -13744,133 +13738,133 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ConnectionImplementation.java">org/apache/hadoop/hbase/client/ConnectionImplementation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L23">23</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'javax.annotation.Nullable' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L81">81</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.Closeable' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L83">83</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 3, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L180">180</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L462">462</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L558">558</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L726">726</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L1187">1187</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 402 lines (max allowed is 150).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L1367">1367</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L1796">1796</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L1844">1844</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L1950">1950</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>NoFinalizer</td>
 <td>Avoid using finalizer method.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2118">2118</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2182">2182</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2198">2198</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2220">2220</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2223">2223</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2229">2229</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2250">2250</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionImplementation.html#L2261">2261</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -13879,31 +13873,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ConnectionUtils.java">org/apache/hadoop/hbase/client/ConnectionUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionUtils.html#L35">35</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionUtils.html#L49">49</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/ConnectionUtils.html#L50">50</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -13912,31 +13906,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.CoprocessorHConnection.java">org/apache/hadoop/hbase/client/CoprocessorHConnection.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/CoprocessorHConnection.html#L24">24</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/CoprocessorHConnection.html#L71">71</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/CoprocessorHConnection.html#L80">80</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -13945,25 +13939,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.DelayingRunner.java">org/apache/hadoop/hbase/client/DelayingRunner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.List' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/DelayingRunner.html#L25">25</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/DelayingRunner.html#L81">81</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -13972,43 +13966,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Delete.java">org/apache/hadoop/hbase/client/Delete.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Delete.html#L112">112</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Delete.html#L113">113</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Delete.html#L129">129</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Delete.html#L130">130</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Delete.html#L157">157</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -14017,13 +14011,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.FlushRegionCallable.java">org/apache/hadoop/hbase/client/FlushRegionCallable.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -14032,37 +14026,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Get.java">org/apache/hadoop/hbase/client/Get.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Get.html#L98">98</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Get.html#L202">202</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Get.html#L291">291</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/Get.html#L301">301</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -14071,625 +14065,625 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HBaseAdmin.java">org/apache/hadoop/hbase/client/HBaseAdmin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L179">179</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 4, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L273">273</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L275">275</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L275">275</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L277">277</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L278">278</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L279">279</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 5, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L395">395</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L400">400</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L400">400</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L401">401</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L401">401</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L415">415</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L416">416</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L417">417</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L418">418</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L487">487</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L489">489</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L489">489</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L491">491</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L492">492</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L493">493</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L536">536</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L538">538</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L538">538</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L540">540</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L541">541</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L542">542</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L588">588</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L718">718</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L720">720</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L720">720</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L721">721</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L721">721</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L723">723</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L724">724</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L725">725</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L780">780</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L782">782</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L782">782</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L783">783</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L783">783</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L785">785</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L786">786</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L787">787</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L838">838</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1192">1192</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1215">1215</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1216">1216</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1244">1244</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1463">1463</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1475">1475</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1478">1478</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1524">1524</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1527">1527</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1529">1529</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 7, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1563">1563</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1580">1580</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1582">1582</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1582">1582</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1584">1584</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1585">1585</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1586">1586</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1621">1621</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1623">1623</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1624">1624</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1625">1625</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1657">1657</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 64 has parse error. Missed HTML close tag 'code'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1768">1768</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1799">1799</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 12, 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1801">1801</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1806">1806</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1807">1807</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1827">1827</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 12, 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1829">1829</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1831">1831</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1832">1832</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1852">1852</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be one of the following: 12, 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1854">1854</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1856">1856</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 4, expected level should be one of the following: 8, 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1857">1857</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1969">1969</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1969">1969</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1970">1970</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1972">1972</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1974">1974</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1975">1975</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1976">1976</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1977">1977</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1978">1978</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1980">1980</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1981">1981</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1982">1982</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1983">1983</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1984">1984</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1985">1985</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'finally rcurly' have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1986">1986</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L2088">2088</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L2810">2810</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L2848">2848</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L2849">2849</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L3298">3298</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -14698,121 +14692,121 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HConnection.java">org/apache/hadoop/hbase/client/HConnection.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L76">76</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L88">88</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L100">100</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L113">113</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L126">126</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L291">291</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L316">316</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L340">340</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L385">385</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L396">396</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L414">414</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L439">439</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L450">450</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L459">459</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L499">499</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L500">500</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L502">502</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HConnection.html#L606">606</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -14821,19 +14815,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HRegionLocator.java">org/apache/hadoop/hbase/client/HRegionLocator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HRegionLocator.html#L25">25</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -14842,79 +14836,79 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HTable.java">org/apache/hadoop/hbase/client/HTable.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L71">71</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L185">185</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L444">444</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L566">566</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L578">578</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L659">659</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L944">944</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L945">945</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L974">974</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L991">991</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTable.html#L992">992</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -14923,13 +14917,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HTableInterface.java">org/apache/hadoop/hbase/client/HTableInterface.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -14938,37 +14932,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HTableMultiplexer.java">org/apache/hadoop/hbase/client/HTableMultiplexer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTableMultiplexer.html#L146">146</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTableMultiplexer.html#L147">147</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTableMultiplexer.html#L157">157</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTableMultiplexer.html#L158">158</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -14977,31 +14971,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HTableWrapper.java">org/apache/hadoop/hbase/client/HTableWrapper.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.protobuf.Descriptors.MethodDescriptor' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTableWrapper.html#L40">40</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTableWrapper.html#L69">69</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/HTableWrapper.html#L137">137</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -15010,13 +15004,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Increment.java">org/apache/hadoop/hbase/client/Increment.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -15025,13 +15019,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.MasterCallable.java">org/apache/hadoop/hbase/client/MasterCallable.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -15040,13 +15034,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.MasterKeepAliveConnection.java">org/apache/hadoop/hbase/client/MasterKeepAliveConnection.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -15055,61 +15049,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.MetaCache.java">org/apache/hadoop/hbase/client/MetaCache.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'cachedRegionLocations' have incorrect indentation level 2, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/MetaCache.html#L52">52</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'new' have incorrect indentation level 2, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/MetaCache.html#L53">53</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/client/MetaCache.html#L80">80</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><im

<TRUNCATED>

[48/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
index 994bc27..e29c530 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
@@ -284,74 +284,85 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#isBootstrapNamespace()">isBootstrapNamespace</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#isTraceEnabled()">isTraceEnabled</a></strong>()</code>
 <div class="block">The procedure could be restarted from a different machine.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#prepareCreate(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">prepareCreate</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Action before any real action of creating namespace.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#releaseLock(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">releaseLock</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">The user should override this method, and release lock if necessary.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#rollbackCreateDirectory(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">rollbackCreateDirectory</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">undo create directory</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#rollbackInsertIntoNSTable(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">rollbackInsertIntoNSTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Undo the insert.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#rollbackSetNamespaceQuota(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">rollbackSetNamespaceQuota</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">remove quota for the namespace if exists</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#rollbackState(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20org.apache.hadoop.hbase.protobuf.generated.MasterProcedureProtos.CreateNamespaceState)">rollbackState</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                           org.apache.hadoop.hbase.protobuf.generated.MasterProcedureProtos.CreateNamespaceState&nbsp;state)</code>
 <div class="block">called to perform the rollback of the specified state</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#rollbackZKNamespaceManagerChange(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">rollbackZKNamespaceManagerChange</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">rollback Zookeeper update.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#serializeStateData(java.io.OutputStream)">serializeStateData</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)</code>
 <div class="block">The user-level code of the procedure may have some state to
  persist (e.g.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#setNamespaceQuota(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20org.apache.hadoop.hbase.NamespaceDescriptor)">setNamespaceQuota</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                   <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;nsDescriptor)</code>
 <div class="block">Set quota for the namespace</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#setNextState(org.apache.hadoop.hbase.protobuf.generated.MasterProcedureProtos.CreateNamespaceState)">setNextState</a></strong>(org.apache.hadoop.hbase.protobuf.generated.MasterProcedureProtos.CreateNamespaceState&nbsp;state)</code>
 <div class="block">Set the next state for the procedure.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired.</div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</code>
@@ -656,13 +667,22 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <dt><span class="strong">Parameters:</span></dt><dd><code>sb</code> - the string builder to use to append the proc specific information</dd></dl>
 </li>
 </ul>
+<a name="isBootstrapNamespace()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isBootstrapNamespace</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.197">isBootstrapNamespace</a>()</pre>
+</li>
+</ul>
 <a name="acquireLock(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireLock</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.198">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.203">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">Procedure</a></code></strong></div>
 <div class="block">The user should override this method, and try to take a lock if necessary.
  A lock can be anything, and it is up to the implementor.
@@ -681,7 +701,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseLock</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.214">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.216">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">Procedure</a></code></strong></div>
 <div class="block">The user should override this method, and release lock if necessary.</div>
 <dl>
@@ -696,7 +716,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.219">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.221">getTableName</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName()">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -709,7 +729,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableOperationType</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.224">getTableOperationType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.226">getTableOperationType</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType()">TableProcedureInterface</a></code></strong></div>
 <div class="block">Given an operation type we can take decisions about what to do with pending operations.
  e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -726,7 +746,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespaceName</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.228">getNamespaceName</a>()</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.230">getNamespaceName</a>()</pre>
 </li>
 </ul>
 <a name="prepareCreate(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">
@@ -735,7 +755,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareCreate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.237">prepareCreate</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.239">prepareCreate</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Action before any real action of creating namespace.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - MasterProcedureEnv</dd>
@@ -749,7 +769,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirectory</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.250">createDirectory</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.252">createDirectory</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                    <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;nsDescriptor)
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create the namespace directory</div>
@@ -764,7 +784,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackCreateDirectory</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.263">rollbackCreateDirectory</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.265">rollbackCreateDirectory</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">undo create directory</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - MasterProcedureEnv</dd>
@@ -778,7 +798,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>insertIntoNSTable</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.278">insertIntoNSTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.280">insertIntoNSTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                      <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;nsDescriptor)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Insert the row into ns table</div>
@@ -793,7 +813,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackInsertIntoNSTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.289">rollbackInsertIntoNSTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.291">rollbackInsertIntoNSTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Undo the insert.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - MasterProcedureEnv</dd>
@@ -807,7 +827,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>updateZKNamespaceManager</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.304">updateZKNamespaceManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.306">updateZKNamespaceManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                             <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;nsDescriptor)
                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Update Zookeeper.</div>
@@ -822,7 +842,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackZKNamespaceManagerChange</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.315">rollbackZKNamespaceManagerChange</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.317">rollbackZKNamespaceManagerChange</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">rollback Zookeeper update.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - MasterProcedureEnv</dd>
@@ -836,7 +856,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>setNamespaceQuota</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.330">setNamespaceQuota</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.332">setNamespaceQuota</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                      <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;nsDescriptor)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Set quota for the namespace</div>
@@ -851,7 +871,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackSetNamespaceQuota</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.343">rollbackSetNamespaceQuota</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.345">rollbackSetNamespaceQuota</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">remove quota for the namespace if exists</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - MasterProcedureEnv</dd>
@@ -865,21 +885,41 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableNamespaceManager</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/TableNamespaceManager.html" title="class in org.apache.hadoop.hbase.master">TableNamespaceManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.352">getTableNamespaceManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/TableNamespaceManager.html" title="class in org.apache.hadoop.hbase.master">TableNamespaceManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.354">getTableNamespaceManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 </li>
 </ul>
 <a name="isTraceEnabled()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>isTraceEnabled</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.361">isTraceEnabled</a>()</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.363">isTraceEnabled</a>()</pre>
 <div class="block">The procedure could be restarted from a different machine. If the variable is null, we need to
  retrieve it.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>traceEnabled</dd></dl>
 </li>
 </ul>
+<a name="shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shouldWaitClientAck</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#line.371">shouldWaitClientAck</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">Procedure</a></code></strong></div>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired. The client can cut down the waiting time
+ by requesting that the result is removed from the executor.
+ In case of system started procedure, we can force the executor to auto-ack.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
+<dt><span class="strong">Returns:</span></dt><dd>true if the executor should wait the client ack for the result.
+         Defaults to return true.</dd></dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
index 5b1137f..c9f4c4b 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
@@ -367,13 +367,20 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</code>
 <div class="block">Extend the toString() information with the procedure details
  e.g.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#updateTableDescCache(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20org.apache.hadoop.hbase.TableName)">updateTableDescCache</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
@@ -896,7 +903,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <a name="updateTableDescCache(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv, org.apache.hadoop.hbase.TableName)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>updateTableDescCache</h4>
 <pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.447">updateTableDescCache</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
@@ -906,6 +913,26 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
+<a name="shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shouldWaitClientAck</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.453">shouldWaitClientAck</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">Procedure</a></code></strong></div>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired. The client can cut down the waiting time
+ by requesting that the result is removed from the executor.
+ In case of system started procedure, we can force the executor to auto-ack.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
+<dt><span class="strong">Returns:</span></dt><dd>true if the executor should wait the client ack for the result.
+         Defaults to return true.</dd></dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.html
index 88c40eb..653dee1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.html
@@ -397,7 +397,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.html
index 3d5a9cf..f6d2649 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.html
@@ -383,7 +383,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.html
index 718d78e..129ea07 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.html
@@ -357,7 +357,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">


[38/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
index 6535576..4186896 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
@@ -198,591 +198,604 @@
 <span class="sourceLineNo">190</span>    return false;<a name="line.190"></a>
 <span class="sourceLineNo">191</span>  }<a name="line.191"></a>
 <span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public String toString() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    StringBuilder sb = new StringBuilder();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    toStringClassDetails(sb);<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (procId != null) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      sb.append(" id=");<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      sb.append(getProcId());<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (hasParent()) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      sb.append(" parent=");<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      sb.append(getParentProcId());<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (hasOwner()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      sb.append(" owner=");<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      sb.append(getOwner());<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    sb.append(" state=");<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    toStringState(sb);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return sb.toString();<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  protected String toStringClass() {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    StringBuilder sb = new StringBuilder();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    toStringClassDetails(sb);<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return sb.toString();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Called from {@link #toString()} when interpolating {@link Procedure} state<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param builder Append current {@link ProcedureState}<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  protected void toStringState(StringBuilder builder) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    builder.append(getState());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * Extend the toString() information with the procedure details<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * e.g. className and parameters<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @param builder the string builder to use to append the proc specific information<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected void toStringClassDetails(StringBuilder builder) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    builder.append(getClass().getName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @return the serialized result if any, otherwise null<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public byte[] getResult() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    return result;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * The procedure may leave a "result" on completion.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param result the serialized result that will be passed to the client<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  protected void setResult(final byte[] result) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    this.result = result;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public long getProcId() {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return procId;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public boolean hasParent() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return parentProcId != null;<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>  public boolean hasException() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    return exception != null;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  public boolean hasTimeout() {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    return timeout != null;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  public long getParentProcId() {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    return parentProcId;<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>  public NonceKey getNonceKey() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return nonceKey;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @return true if the procedure has failed.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   *         true may mean failed but not yet rolledback or failed and rolledback.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public synchronized boolean isFailed() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return exception != null || state == ProcedureState.ROLLEDBACK;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @return true if the procedure is finished successfully.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public synchronized boolean isSuccess() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return state == ProcedureState.FINISHED &amp;&amp; exception == null;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  /**<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return true if the procedure is finished. The Procedure may be completed<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *         successfuly or failed and rolledback.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public synchronized boolean isFinished() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    switch (state) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      case ROLLEDBACK:<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        return true;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      case FINISHED:<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        return exception == null;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      default:<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        break;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return false;<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>  /**<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @return true if the procedure is waiting for a child to finish or for an external event.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  public synchronized boolean isWaiting() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    switch (state) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      case WAITING:<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      case WAITING_TIMEOUT:<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        return true;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      default:<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        break;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return false;<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>  public synchronized RemoteProcedureException getException() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return exception;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  public long getStartTime() {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    return startTime;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public synchronized long getLastUpdate() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    return lastUpdate;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public synchronized long elapsedTime() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    return lastUpdate - startTime;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>  /**<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param timeout timeout in msec<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  protected void setTimeout(final int timeout) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    this.timeout = timeout;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @return the timeout in msec<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public int getTimeout() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return timeout;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * @return the remaining time before the timeout<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   */<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public long getTimeRemaining() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return Math.max(0, timeout - (EnvironmentEdgeManager.currentTime() - startTime));<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @VisibleForTesting<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  @InterfaceAudience.Private<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  public void setOwner(final String owner) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    this.owner = StringUtils.isEmpty(owner) ? null : owner;<a name="line.366"></a>
+<span class="sourceLineNo">193</span>  /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * By default, the executor will keep the procedure result around util<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * the eviction TTL is expired. The client can cut down the waiting time<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * by requesting that the result is removed from the executor.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * In case of system started procedure, we can force the executor to auto-ack.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @param env the environment passed to the ProcedureExecutor<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @return true if the executor should wait the client ack for the result.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   *         Defaults to return true.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  protected boolean shouldWaitClientAck(final TEnvironment env) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    return true;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>  @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public String toString() {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    StringBuilder sb = new StringBuilder();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    toStringClassDetails(sb);<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    if (procId != null) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      sb.append(" id=");<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      sb.append(getProcId());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>    if (hasParent()) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      sb.append(" parent=");<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      sb.append(getParentProcId());<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    if (hasOwner()) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      sb.append(" owner=");<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      sb.append(getOwner());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    sb.append(" state=");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    toStringState(sb);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return sb.toString();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected String toStringClass() {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    StringBuilder sb = new StringBuilder();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    toStringClassDetails(sb);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return sb.toString();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * Called from {@link #toString()} when interpolating {@link Procedure} state<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @param builder Append current {@link ProcedureState}<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  protected void toStringState(StringBuilder builder) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    builder.append(getState());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  /**<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * Extend the toString() information with the procedure details<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * e.g. className and parameters<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param builder the string builder to use to append the proc specific information<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  protected void toStringClassDetails(StringBuilder builder) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    builder.append(getClass().getName());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>  /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * @return the serialized result if any, otherwise null<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  public byte[] getResult() {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    return result;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * The procedure may leave a "result" on completion.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * @param result the serialized result that will be passed to the client<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  protected void setResult(final byte[] result) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    this.result = result;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public long getProcId() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return procId;<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>  public boolean hasParent() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    return parentProcId != null;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public boolean hasException() {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    return exception != null;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public boolean hasTimeout() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return timeout != null;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public long getParentProcId() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return parentProcId;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public NonceKey getNonceKey() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    return nonceKey;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * @return true if the procedure has failed.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   *         true may mean failed but not yet rolledback or failed and rolledback.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  public synchronized boolean isFailed() {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return exception != null || state == ProcedureState.ROLLEDBACK;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @return true if the procedure is finished successfully.<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public synchronized boolean isSuccess() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return state == ProcedureState.FINISHED &amp;&amp; exception == null;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @return true if the procedure is finished. The Procedure may be completed<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   *         successfuly or failed and rolledback.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public synchronized boolean isFinished() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    switch (state) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      case ROLLEDBACK:<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        return true;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      case FINISHED:<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        return exception == null;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      default:<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        break;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    return false;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return true if the procedure is waiting for a child to finish or for an external event.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public synchronized boolean isWaiting() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    switch (state) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      case WAITING:<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      case WAITING_TIMEOUT:<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        return true;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      default:<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        break;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return false;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  public synchronized RemoteProcedureException getException() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    return exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  public long getStartTime() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return startTime;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public synchronized long getLastUpdate() {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    return lastUpdate;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  public synchronized long elapsedTime() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return lastUpdate - startTime;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * @param timeout timeout in msec<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   */<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  protected void setTimeout(final int timeout) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    this.timeout = timeout;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @return the timeout in msec<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public int getTimeout() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return timeout;<a name="line.366"></a>
 <span class="sourceLineNo">367</span>  }<a name="line.367"></a>
 <span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public String getOwner() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return owner;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public boolean hasOwner() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    return owner != null;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  @InterfaceAudience.Private<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  protected synchronized void setState(final ProcedureState state) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    this.state = state;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    updateTimestamp();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  @InterfaceAudience.Private<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  protected synchronized ProcedureState getState() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return state;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  protected void setFailure(final String source, final Throwable cause) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    setFailure(new RemoteProcedureException(source, cause));<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>  protected synchronized void setFailure(final RemoteProcedureException exception) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    this.exception = exception;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    if (!isFinished()) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      setState(ProcedureState.FINISHED);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  protected void setAbortFailure(final String source, final String msg) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    setFailure(source, new ProcedureAbortedException(msg));<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span>  @InterfaceAudience.Private<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  protected synchronized boolean setTimeoutFailure() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    if (state == ProcedureState.WAITING_TIMEOUT) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      long timeDiff = EnvironmentEdgeManager.currentTime() - lastUpdate;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      setFailure("ProcedureExecutor", new TimeoutIOException(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        "Operation timed out after " + StringUtils.humanTimeDiff(timeDiff)));<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return true;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    return false;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>  /**<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * Called by the ProcedureExecutor to assign the ID to the newly created procedure.<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  @VisibleForTesting<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  @InterfaceAudience.Private<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  protected void setProcId(final long procId) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    this.procId = procId;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    this.startTime = EnvironmentEdgeManager.currentTime();<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    setState(ProcedureState.RUNNABLE);<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>  /**<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * Called by the ProcedureExecutor to assign the parent to the newly created procedure.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  @InterfaceAudience.Private<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  protected void setParentProcId(final long parentProcId) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    this.parentProcId = parentProcId;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /**<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * Called by the ProcedureExecutor to set the value to the newly created procedure.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  @VisibleForTesting<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  @InterfaceAudience.Private<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  protected void setNonceKey(final NonceKey nonceKey) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    this.nonceKey = nonceKey;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * Internal method called by the ProcedureExecutor that starts the<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * user-level code execute().<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  @InterfaceAudience.Private<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  protected Procedure[] doExecute(final TEnvironment env)<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      throws ProcedureYieldException, InterruptedException {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    try {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      updateTimestamp();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      return execute(env);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    } finally {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      updateTimestamp();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  /**<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * Internal method called by the ProcedureExecutor that starts the<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * user-level code rollback().<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  @InterfaceAudience.Private<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  protected void doRollback(final TEnvironment env)<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      throws IOException, InterruptedException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    try {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      updateTimestamp();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      rollback(env);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    } finally {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      updateTimestamp();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  /**<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * Called on store load to initialize the Procedure internals after<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * the creation/deserialization.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  @InterfaceAudience.Private<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected void setStartTime(final long startTime) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    this.startTime = startTime;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>  /**<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * Called on store load to initialize the Procedure internals after<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * the creation/deserialization.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private synchronized void setLastUpdate(final long lastUpdate) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.lastUpdate = lastUpdate;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  protected synchronized void updateTimestamp() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    this.lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  @InterfaceAudience.Private<a name="line.497"></a>
-<span class="sourceLineNo">498</span>  protected synchronized void setChildrenLatch(final int numChildren) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    this.childrenLatch = numChildren;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  /**<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  @InterfaceAudience.Private<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  protected synchronized void incChildrenLatch() {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // TODO: can this be inferred from the stack? I think so...<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    this.childrenLatch++;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * Called by the ProcedureExecutor to notify that one of the sub-procedures<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * has completed.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @InterfaceAudience.Private<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  protected synchronized boolean childrenCountDown() {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    assert childrenLatch &gt; 0;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    return --childrenLatch == 0;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>  /**<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   * Called by the RootProcedureState on procedure execution.<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Each procedure store its stack-index positions.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   */<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  @InterfaceAudience.Private<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  protected synchronized void addStackIndex(final int index) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    if (stackIndexes == null) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      stackIndexes = new int[] { index };<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    } else {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      int count = stackIndexes.length;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      stackIndexes = Arrays.copyOf(stackIndexes, count + 1);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      stackIndexes[count] = index;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>  @InterfaceAudience.Private<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  protected synchronized boolean removeStackIndex() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    if (stackIndexes.length &gt; 1) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      stackIndexes = Arrays.copyOf(stackIndexes, stackIndexes.length - 1);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return false;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    } else {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      stackIndexes = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>  /**<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * Called on store load to initialize the Procedure internals after<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * the creation/deserialization.<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  @InterfaceAudience.Private<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  protected synchronized void setStackIndexes(final List&lt;Integer&gt; stackIndexes) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    this.stackIndexes = new int[stackIndexes.size()];<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    for (int i = 0; i &lt; this.stackIndexes.length; ++i) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      this.stackIndexes[i] = stackIndexes.get(i);<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>  @InterfaceAudience.Private<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  protected synchronized boolean wasExecuted() {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return stackIndexes != null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return the remaining time before the timeout<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public long getTimeRemaining() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return Math.max(0, timeout - (EnvironmentEdgeManager.currentTime() - startTime));<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  @VisibleForTesting<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @InterfaceAudience.Private<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  public void setOwner(final String owner) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    this.owner = StringUtils.isEmpty(owner) ? null : owner;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public String getOwner() {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    return owner;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  }<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>  public boolean hasOwner() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return owner != null;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  @InterfaceAudience.Private<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  protected synchronized void setState(final ProcedureState state) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    this.state = state;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    updateTimestamp();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>  @InterfaceAudience.Private<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  protected synchronized ProcedureState getState() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return state;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  protected void setFailure(final String source, final Throwable cause) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    setFailure(new RemoteProcedureException(source, cause));<a name="line.403"></a>
+<span class="sourceLineNo">404</span>  }<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>  protected synchronized void setFailure(final RemoteProcedureException exception) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    this.exception = exception;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    if (!isFinished()) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      setState(ProcedureState.FINISHED);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>  protected void setAbortFailure(final String source, final String msg) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    setFailure(source, new ProcedureAbortedException(msg));<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  @InterfaceAudience.Private<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  protected synchronized boolean setTimeoutFailure() {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    if (state == ProcedureState.WAITING_TIMEOUT) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      long timeDiff = EnvironmentEdgeManager.currentTime() - lastUpdate;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      setFailure("ProcedureExecutor", new TimeoutIOException(<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        "Operation timed out after " + StringUtils.humanTimeDiff(timeDiff)));<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    return false;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>  /**<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * Called by the ProcedureExecutor to assign the ID to the newly created procedure.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  @VisibleForTesting<a name="line.431"></a>
+<span class="sourceLineNo">432</span>  @InterfaceAudience.Private<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  protected void setProcId(final long procId) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    this.procId = procId;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    this.startTime = EnvironmentEdgeManager.currentTime();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    setState(ProcedureState.RUNNABLE);<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>   * Called by the ProcedureExecutor to assign the parent to the newly created procedure.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   */<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  @InterfaceAudience.Private<a name="line.442"></a>
+<span class="sourceLineNo">443</span>  protected void setParentProcId(final long parentProcId) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    this.parentProcId = parentProcId;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Called by the ProcedureExecutor to set the value to the newly created procedure.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  @VisibleForTesting<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  @InterfaceAudience.Private<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  protected void setNonceKey(final NonceKey nonceKey) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    this.nonceKey = nonceKey;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * Internal method called by the ProcedureExecutor that starts the<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * user-level code execute().<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   */<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  @InterfaceAudience.Private<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  protected Procedure[] doExecute(final TEnvironment env)<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      throws ProcedureYieldException, InterruptedException {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    try {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      updateTimestamp();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      return execute(env);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    } finally {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      updateTimestamp();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * Internal method called by the ProcedureExecutor that starts the<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * user-level code rollback().<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  @InterfaceAudience.Private<a name="line.475"></a>
+<span class="sourceLineNo">476</span>  protected void doRollback(final TEnvironment env)<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      throws IOException, InterruptedException {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    try {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      updateTimestamp();<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      rollback(env);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    } finally {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      updateTimestamp();<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
+<span class="sourceLineNo">485</span><a name="line.485"></a>
+<span class="sourceLineNo">486</span>  /**<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   * Called on store load to initialize the Procedure internals after<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * the creation/deserialization.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   */<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  @InterfaceAudience.Private<a name="line.490"></a>
+<span class="sourceLineNo">491</span>  protected void setStartTime(final long startTime) {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    this.startTime = startTime;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>  /**<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * Called on store load to initialize the Procedure internals after<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   * the creation/deserialization.<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
+<span class="sourceLineNo">499</span>  private synchronized void setLastUpdate(final long lastUpdate) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    this.lastUpdate = lastUpdate;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span>  protected synchronized void updateTimestamp() {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    this.lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  }<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>  /**<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   */<a name="line.509"></a>
+<span class="sourceLineNo">510</span>  @InterfaceAudience.Private<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  protected synchronized void setChildrenLatch(final int numChildren) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    this.childrenLatch = numChildren;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>  }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>  /**<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   */<a name="line.517"></a>
+<span class="sourceLineNo">518</span>  @InterfaceAudience.Private<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  protected synchronized void incChildrenLatch() {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    // TODO: can this be inferred from the stack? I think so...<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    this.childrenLatch++;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>  /**<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * Called by the ProcedureExecutor to notify that one of the sub-procedures<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   * has completed.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
+<span class="sourceLineNo">528</span>  @InterfaceAudience.Private<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  protected synchronized boolean childrenCountDown() {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    assert childrenLatch &gt; 0;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    return --childrenLatch == 0;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  /**<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * Called by the RootProcedureState on procedure execution.<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * Each procedure store its stack-index positions.<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   */<a name="line.537"></a>
+<span class="sourceLineNo">538</span>  @InterfaceAudience.Private<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  protected synchronized void addStackIndex(final int index) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (stackIndexes == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      stackIndexes = new int[] { index };<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    } else {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      int count = stackIndexes.length;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      stackIndexes = Arrays.copyOf(stackIndexes, count + 1);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      stackIndexes[count] = index;<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
+<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
+<span class="sourceLineNo">548</span><a name="line.548"></a>
+<span class="sourceLineNo">549</span>  @InterfaceAudience.Private<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  protected synchronized boolean removeStackIndex() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    if (stackIndexes.length &gt; 1) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      stackIndexes = Arrays.copyOf(stackIndexes, stackIndexes.length - 1);<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return false;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    } else {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      stackIndexes = null;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      return true;<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>  /**<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * Called on store load to initialize the Procedure internals after<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * the creation/deserialization.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
 <span class="sourceLineNo">564</span>  @InterfaceAudience.Private<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  protected synchronized int[] getStackIndexes() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return stackIndexes;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  public int compareTo(final Procedure other) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    long diff = getProcId() - other.getProcId();<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    return (diff &lt; 0) ? -1 : (diff &gt; 0) ? 1 : 0;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * Get an hashcode for the specified Procedure ID<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * @return the hashcode for the specified procId<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   */<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public static long getProcIdHashCode(final long procId) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    long h = procId;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    h ^= h &gt;&gt; 16;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    h *= 0x85ebca6b;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    h ^= h &gt;&gt; 13;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    h *= 0xc2b2ae35;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    h ^= h &gt;&gt; 16;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    return h;<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  /*<a name="line.589"></a>
-<span class="sourceLineNo">590</span>   * Helper to lookup the root Procedure ID given a specified procedure.<a name="line.590"></a>
+<span class="sourceLineNo">565</span>  protected synchronized void setStackIndexes(final List&lt;Integer&gt; stackIndexes) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    this.stackIndexes = new int[stackIndexes.size()];<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    for (int i = 0; i &lt; this.stackIndexes.length; ++i) {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      this.stackIndexes[i] = stackIndexes.get(i);<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
+<span class="sourceLineNo">571</span><a name="line.571"></a>
+<span class="sourceLineNo">572</span>  @InterfaceAudience.Private<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  protected synchronized boolean wasExecuted() {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    return stackIndexes != null;<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>  @InterfaceAudience.Private<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  protected synchronized int[] getStackIndexes() {<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    return stackIndexes;<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>  @Override<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  public int compareTo(final Procedure other) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    long diff = getProcId() - other.getProcId();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    return (diff &lt; 0) ? -1 : (diff &gt; 0) ? 1 : 0;<a name="line.585"></a>
+<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span>  /**<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   * Get an hashcode for the specified Procedure ID<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @return the hashcode for the specified procId<a name="line.590"></a>
 <span class="sourceLineNo">591</span>   */<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  @InterfaceAudience.Private<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  protected static Long getRootProcedureId(final Map&lt;Long, Procedure&gt; procedures, Procedure proc) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    while (proc.hasParent()) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      proc = procedures.get(proc.getParentProcId());<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      if (proc == null) return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return proc.getProcId();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  protected static Procedure newInstance(final String className) throws IOException {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    try {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      Class&lt;?&gt; clazz = Class.forName(className);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      if (!Modifier.isPublic(clazz.getModifiers())) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        throw new Exception("the " + clazz + " class is not public");<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      Constructor&lt;?&gt; ctor = clazz.getConstructor();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      assert ctor != null : "no constructor found";<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      if (!Modifier.isPublic(ctor.getModifiers())) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        throw new Exception("the " + clazz + " constructor is not public");<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      return (Procedure)ctor.newInstance();<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    } catch (Exception e) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      throw new IOException("The procedure class " + className +<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          " must be accessible and have an empty constructor", e);<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>  protected static void validateClass(final Procedure proc) throws IOException {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    try {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Class&lt;?&gt; clazz = proc.getClass();<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      if (!Modifier.isPublic(clazz.getModifiers())) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        throw new Exception("the " + clazz + " class is not public");<a name="line.624"></a>
+<span class="sourceLineNo">592</span>  public static long getProcIdHashCode(final long procId) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    long h = procId;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    h ^= h &gt;&gt; 16;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    h *= 0x85ebca6b;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    h ^= h &gt;&gt; 13;<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    h *= 0xc2b2ae35;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    h ^= h &gt;&gt; 16;<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return h;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /*<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * Helper to lookup the root Procedure ID given a specified procedure.<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  @InterfaceAudience.Private<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  protected static Long getRootProcedureId(final Map&lt;Long, Procedure&gt; procedures, Procedure proc) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    while (proc.hasParent()) {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      proc = procedures.get(proc.getParentProcId());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      if (proc == null) return null;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    return proc.getProcId();<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>  protected static Procedure newInstance(final String className) throws IOException {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    try {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      Class&lt;?&gt; clazz = Class.forName(className);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      if (!Modifier.isPublic(clazz.getModifiers())) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        throw new Exception("the " + clazz + " class is not public");<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>      Constructor&lt;?&gt; ctor = clazz.getConstructor();<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      assert ctor != null : "no constructor found";<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      if (!Modifier.isPublic(ctor.getModifiers())) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        throw new Exception("the " + clazz + " constructor is not public");<a name="line.624"></a>
 <span class="sourceLineNo">625</span>      }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>      Constructor&lt;?&gt; ctor = clazz.getConstructor();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      assert ctor != null;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      if (!Modifier.isPublic(ctor.getModifiers())) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        throw new Exception("the " + clazz + " constructor is not public");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      }<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    } catch (Exception e) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      throw new IOException("The procedure class " + proc.getClass().getName() +<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          " must be accessible and have an empty constructor", e);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Helper to create the ProcedureInfo from Procedure.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  @InterfaceAudience.Private<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public static ProcedureInfo createProcedureInfo(final Procedure proc, final NonceKey nonceKey) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    RemoteProcedureException exception = proc.hasException() ? proc.getException() : null;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return new ProcedureInfo(<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      proc.getProcId(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      proc.toStringClass(),<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      proc.getOwner(),<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      proc.getState(),<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      proc.hasParent() ? proc.getParentProcId() : -1,<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      nonceKey,<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      exception != null ?<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          RemoteProcedureException.toProto(exception.getSource(), exception.getCause()) : null,<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      proc.getLastUpdate(),<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      proc.getStartTime(),<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      proc.getResult());<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * Helper to convert the procedure to protobuf.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Used by ProcedureStore implementations.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   */<a name="line.661"></a>
-<span class="sourceLineNo">662</span>  @InterfaceAudience.Private<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  public static ProcedureProtos.Procedure convert(final Procedure proc)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      throws IOException {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    Preconditions.checkArgument(proc != null);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    validateClass(proc);<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    ProcedureProtos.Procedure.Builder builder = ProcedureProtos.Procedure.newBuilder()<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      .setClassName(proc.getClass().getName())<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      .setProcId(proc.getProcId())<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      .setState(proc.getState())<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      .setStartTime(proc.getStartTime())<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      .setLastUpdate(proc.getLastUpdate());<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>    if (proc.hasParent()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      builder.setParentId(proc.getParentProcId());<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    }<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>    if (proc.hasTimeout()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      builder.setTimeout(proc.getTimeout());<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>    if (proc.hasOwner()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      builder.setOwner(proc.getOwner());<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>    int[] stackIds = proc.getStackIndexes();<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    if (stackIds != null) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      for (int i = 0; i &lt; stackIds.length; ++i) {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        builder.addStackId(stackIds[i]);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    if (proc.hasException()) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      RemoteProcedureException exception = proc.getException();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      builder.setException(<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        RemoteProcedureException.toProto(exception.getSource(), exception.getCause()));<a name="line.697"></a>
+<span class="sourceLineNo">626</span>      return (Procedure)ctor.newInstance();<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    } catch (Exception e) {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      throw new IOException("The procedure class " + className +<a name="line.628"></a>
+<span class="sourceLineNo">629</span>          " must be accessible and have an empty constructor", e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
+<span class="sourceLineNo">631</span>  }<a name="line.631"></a>
+<span class="sourceLineNo">632</span><a name="line.632"></a>
+<span class="sourceLineNo">633</span>  protected static void validateClass(final Procedure proc) throws IOException {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    try {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      Class&lt;?&gt; clazz = proc.getClass();<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      if (!Modifier.isPublic(clazz.getModifiers())) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        throw new Exception("the " + clazz + " class is not public");<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      }<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span>      Constructor&lt;?&gt; ctor = clazz.getConstructor();<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      assert ctor != null;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      if (!Modifier.isPublic(ctor.getModifiers())) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        throw new Exception("the " + clazz + " constructor is not public");<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      }<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    } catch (Exception e) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      throw new IOException("The procedure class " + proc.getClass().getName() +<a name="line.646"></a>
+<span class="sourceLineNo">647</span>          " must be accessible and have an empty constructor", e);<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    }<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * Helper to create the ProcedureInfo from Procedure.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   */<a name="line.653"></a>
+<span class="sourceLineNo">654</span>  @InterfaceAudience.Private<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  public static ProcedureInfo createProcedureInfo(final Procedure proc, final NonceKey nonceKey) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    RemoteProcedureException exception = proc.hasException() ? proc.getException() : null;<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    return new ProcedureInfo(<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      proc.getProcId(),<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      proc.toStringClass(),<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      proc.getOwner(),<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      proc.getState(),<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      proc.hasParent() ? proc.getParentProcId() : -1,<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      nonceKey,<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      exception != null ?<a name="line.664"></a>
+<span class="sourceLineNo">665</span>          RemoteProcedureException.toProto(exception.getSource(), exception.getCause()) : null,<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      proc.getLastUpdate(),<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      proc.getStartTime(),<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      proc.getResult());<a name="line.668"></a>
+<span class="sourceLineNo">669</span>  }<a name="line.669"></a>
+<span class="sourceLineNo">670</span><a name="line.670"></a>
+<span class="sourceLineNo">671</span>  /**<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * Helper to convert the procedure to protobuf.<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * Used by ProcedureStore implementations.<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   */<a name="line.674"></a>
+<span class="sourceLineNo">675</span>  @InterfaceAudience.Private<a name="line.675"></a>
+<span class="sourceLineNo">676</span>  public static ProcedureProtos.Procedure convert(final Procedure proc)<a name="line.676"></a>
+<span class="sourceLineNo">677</span>      throws IOException {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    Preconditions.checkArgument(proc != null);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    validateClass(proc);<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>    ProcedureProtos.Procedure.Builder builder = ProcedureProtos.Procedure.newBuilder()<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      .setClassName(proc.getClass().getName())<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      .setProcId(proc.getProcId())<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      .setState(proc.getState())<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      .setStartTime(proc.getStartTime())<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      .setLastUpdate(proc.getLastUpdate());<a name="line.686"></a>
+<span class="sourceLineNo">687</span><a name="line.687"></a>
+<span class="sourceLineNo">688</span>    if (proc.hasParent()) {<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      builder.setParentId(proc.getParentProcId());<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    if (proc.hasTimeout()) {<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      builder.setTimeout(proc.getTimeout());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>    if (proc.hasOwner()) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      builder.setOwner(proc.getOwner());<a name="line.697"></a>
 <span class="sourceLineNo">698</span>    }<a name="li

<TRUNCATED>

[18/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugin-management.html b/hbase-spark/plugin-management.html
index 86deed1..24d3732 100644
--- a/hbase-spark/plugin-management.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugins.html b/hbase-spark/plugins.html
index 76ddccc..4c30246 100644
--- a/hbase-spark/plugins.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-info.html b/hbase-spark/project-info.html
index 0b176cf..645d97e 100644
--- a/hbase-spark/project-info.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-reports.html b/hbase-spark/project-reports.html
index 913da4f..f235066 100644
--- a/hbase-spark/project-reports.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-summary.html b/hbase-spark/project-summary.html
index 85d5db7..edbb659 100644
--- a/hbase-spark/project-summary.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-spark/source-repository.html b/hbase-spark/source-repository.html
index 4ab2a76..b7ab1bf 100644
--- a/hbase-spark/source-repository.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-spark/team-list.html b/hbase-spark/team-list.html
index abf0fa2..db57d1fa 100644
--- a/hbase-spark/team-list.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 12296a9..194fba9 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -422,7 +422,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index b76bdab..4db32e6 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Continuous Integration</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index d3d2622..636c17d 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Tracking</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -287,7 +287,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 9cc67e5..5f9731d 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project License</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -490,7 +490,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 32d749b..31bc24b 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index a67a80e..c083236 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -458,7 +458,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/modules.html
----------------------------------------------------------------------
diff --git a/modules.html b/modules.html
index f887727..61d9e4b 100644
--- a/modules.html
+++ b/modules.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Modules</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -378,7 +378,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 3c6a7ba..083807a 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -413,7 +413,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 8728483..3dd8272 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -423,7 +423,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 015d9c4..1967f28 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Build Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index d2f28b4..af44ce2 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -768,7 +768,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 6dd620b..e00309f 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 6dad199..deb9b7e 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -310,7 +310,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 4ab090d..f928a63 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -330,7 +330,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 7e33675..350c1ad 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -307,7 +307,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index acd9b62..734ecc6 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -302,7 +302,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index ff38faa..dc22797 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -324,7 +324,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 80804b5..2b39ee3 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Repository</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -298,7 +298,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 296e222..d5e1b84 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -332,7 +332,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 461215d..8b4974c 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -519,7 +519,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index e75b904..d8e0c79 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Team list</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -785,7 +785,7 @@ window.onLoad = init();
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index fc34701..1038065 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1406,6 +1406,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatRPCServices</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.SparseFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/TestScannerModel.html" title="class in org.apache.hadoop.hbase.rest.model" target="classFrame">TestScannerModel</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestScannerResource.html" title="class in org.apache.hadoop.hbase.rest" target="classFrame">TestScannerResource</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerRetriableFailure</a></li>
@@ -1676,8 +1677,10 @@
 <li><a href="org/apache/hadoop/hbase/security/visibility/TestWithDisabledAuthorization.html" title="class in org.apache.hadoop.hbase.security.visibility" target="classFrame">TestWithDisabledAuthorization</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestProcEnv</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestRunQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestStateMachineProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestStateMachineProcedure.State</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestYieldProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/zookeeper/TestZKConfig.html" title="class in org.apache.hadoop.hbase.zookeeper" target="classFrame">TestZKConfig</a></li>
 <li><a href="org/apache/hadoop/hbase/zookeeper/lock/TestZKInterProcessReadWriteLock.html" title="class in org.apache.hadoop.hbase.zookeeper.lock" target="classFrame">TestZKInterProcessReadWriteLock</a></li>
 <li><a href="org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html" title="class in org.apache.hadoop.hbase.zookeeper" target="classFrame">TestZKLeaderManager</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 0ecf1c3..9f669cd 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1406,6 +1406,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.HeartbeatRPCServices</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.SparseFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/TestScannerModel.html" title="class in org.apache.hadoop.hbase.rest.model">TestScannerModel</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestScannerResource.html" title="class in org.apache.hadoop.hbase.rest">TestScannerResource</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerRetriableFailure</a></li>
@@ -1676,8 +1677,10 @@
 <li><a href="org/apache/hadoop/hbase/security/visibility/TestWithDisabledAuthorization.html" title="class in org.apache.hadoop.hbase.security.visibility">TestWithDisabledAuthorization</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/zookeeper/TestZKConfig.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKConfig</a></li>
 <li><a href="org/apache/hadoop/hbase/zookeeper/lock/TestZKInterProcessReadWriteLock.html" title="class in org.apache.hadoop.hbase.zookeeper.lock">TestZKInterProcessReadWriteLock</a></li>
 <li><a href="org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKLeaderManager</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 3bcb063..10f8f0b 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -144,6 +144,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#abort(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">abort(TestYieldProcedures.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#abort(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">abort(TestYieldProcedures.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.RegionServerStub.html#abort(java.lang.String,%20java.lang.Throwable)">abort(String, Throwable)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.RegionServerStub.html" title="class in org.apache.hadoop.hbase.regionserver">TestHeapMemoryManager.RegionServerStub</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html#abort(java.lang.String,%20java.lang.Throwable)">abort(String, Throwable)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitLogWorker.DummyServer</a></dt>
@@ -372,6 +374,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcSet.html#addBack(org.apache.hadoop.hbase.procedure2.Procedure)">addBack(Procedure)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcSet.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestTableProcSet</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addBack(org.apache.hadoop.hbase.procedure2.Procedure)">addBack(Procedure)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addBackCalls">addBackCalls</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/TestCatalogJanitor.MockMasterServices.html#addColumn(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long,%20long)">addColumn(TableName, HColumnDescriptor, long, long)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/TestCatalogJanitor.MockMasterServices.html" title="class in org.apache.hadoop.hbase.master">TestCatalogJanitor.MockMasterServices</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/TestTableLockManager.html#addColumn">addColumn</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/TestTableLockManager.html" title="class in org.apache.hadoop.hbase.master">TestTableLockManager</a></dt>
@@ -462,6 +468,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcSet.html#addFront(org.apache.hadoop.hbase.procedure2.Procedure)">addFront(Procedure)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcSet.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestTableProcSet</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addFront(org.apache.hadoop.hbase.procedure2.Procedure)">addFront(Procedure)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addFrontCalls">addFrontCalls</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.MockRecordBuilder.html#addGauge(org.apache.hadoop.metrics2.MetricsInfo,%20int)">addGauge(MetricsInfo, int)</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="./org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.MockRecordBuilder.html" title="class in org.apache.hadoop.hbase.test">MetricsAssertHelperImpl.MockRecordBuilder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.MockRecordBuilder.html#addGauge(org.apache.hadoop.metrics2.MetricsInfo,%20long)">addGauge(MetricsInfo, long)</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="./org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.MockRecordBuilder.html" title="class in org.apache.hadoop.hbase.test">MetricsAssertHelperImpl.MockRecordBuilder</a></dt>
@@ -4114,6 +4124,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.html#completedWithPool">completedWithPool</a></span> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="./org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.html" title="class in org.apache.hadoop.hbase.coprocessor">TestOpenTableInCoprocessor</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#completionCalls">completionCalls</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#completionCleanup(org.apache.hadoop.hbase.procedure2.Procedure)">completionCleanup(Procedure)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.html#COMPOSITE_ACTION3_PERIOD">COMPOSITE_ACTION3_PERIOD</a></span> - Static variable in interface org.apache.hadoop.hbase.chaos.factories.<a href="./org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.html" title="interface in org.apache.hadoop.hbase.chaos.factories">MonkeyConstants</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapreduce/TestRowCounter.html#COMPOSITE_COLUMN">COMPOSITE_COLUMN</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="./org/apache/hadoop/hbase/mapreduce/TestRowCounter.html" title="class in org.apache.hadoop.hbase.mapreduce">TestRowCounter</a></dt>
@@ -7084,6 +7098,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData(InputStream)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureToString.BasicProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData(InputStream)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData(InputStream)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController.TestTableDDLProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/test/IntegrationTestReplication.html#DEST_CLUSTER_OPT">DEST_CLUSTER_OPT</a></span> - Variable in class org.apache.hadoop.hbase.test.<a href="./org/apache/hadoop/hbase/test/IntegrationTestReplication.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestReplication</a></dt>
@@ -8046,6 +8062,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html#execute(org.apache.hadoop.hbase.procedure2.TestProcedureToString.BasicProcedureEnv)">execute(TestProcedureToString.BasicProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureToString.BasicProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#execute(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">execute(TestYieldProcedures.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html#execute(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">execute(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController.TestTableDDLProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestCounter.html#execute(org.apache.hadoop.hbase.util.TestCounter.Operation,%20int)">execute(TestCounter.Operation, int)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestCounter.html" title="class in org.apache.hadoop.hbase.util">TestCounter</a></dt>
@@ -8925,6 +8943,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/TestInvocationRecordFilter.InvocationRecordFilter.html#filterKeyValue(org.apache.hadoop.hbase.Cell)">filterKeyValue(Cell)</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/TestInvocationRecordFilter.InvocationRecordFilter.html" title="class in org.apache.hadoop.hbase.filter">TestInvocationRecordFilter.InvocationRecordFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#filterKeyValue(org.apache.hadoop.hbase.Cell)">filterKeyValue(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.SparseFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.NoDataFilter.html#filterRow()">filterRow()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="./org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.NoDataFilter.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRegionObserverScannerOpenHook.NoDataFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/FilterAllFilter.html#filterRow()">filterRow()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/FilterAllFilter.html" title="class in org.apache.hadoop.hbase.filter">FilterAllFilter</a></dt>
@@ -15042,6 +15062,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.html#isWriting()">isWriting()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlockCompatibility.Writer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#isYieldAfterExecutionStep(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">isYieldAfterExecutionStep(TestYieldProcedures.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#isYieldBeforeExecuteFromState(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv,%20org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestStateMachineProcedure.State)">isYieldBeforeExecuteFromState(TestYieldProcedures.TestProcEnv, TestYieldProcedures.TestStateMachineProcedure.State)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Loop.html#it">it</a></span> - Variable in class org.apache.hadoop.hbase.test.<a href="./org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Loop.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedList.Loop</a></dt>
@@ -19963,6 +19985,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/TestFilterList.AlwaysNextColFilter.html#parseFrom(byte[])">parseFrom(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/TestFilterList.AlwaysNextColFilter.html" title="class in org.apache.hadoop.hbase.filter">TestFilterList.AlwaysNextColFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#parseFrom(byte[])">parseFrom(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.SparseFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/MultiThreadedAction.html#parseMutateInfo(byte[])">parseMutateInfo(byte[])</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/MultiThreadedAction.html" title="class in org.apache.hadoop.hbase.util">MultiThreadedAction</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/PerformanceEvaluation.html#parseOpts(java.util.Queue)">parseOpts(Queue&lt;String&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/PerformanceEvaluation.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation</a></dt>
@@ -20492,10 +20516,14 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.html#PolicyBasedChaosMonkey(org.apache.hadoop.hbase.IntegrationTestingUtility,%20java.util.Collection)">PolicyBasedChaosMonkey(IntegrationTestingUtility, Collection&lt;Policy&gt;)</a></span> - Constructor for class org.apache.hadoop.hbase.chaos.monkies.<a href="./org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.html" title="class in org.apache.hadoop.hbase.chaos.monkies">PolicyBasedChaosMonkey</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#poll()">poll()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ConstantDelayQueue.html#poll()">poll()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ConstantDelayQueue.html" title="class in org.apache.hadoop.hbase.util">ConstantDelayQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ConstantDelayQueue.html#poll(long,%20java.util.concurrent.TimeUnit)">poll(long, TimeUnit)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ConstantDelayQueue.html" title="class in org.apache.hadoop.hbase.util">ConstantDelayQueue</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#pollCalls">pollCalls</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestClientScanner.html#pool">pool</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestClientScanner.html" title="class in org.apache.hadoop.hbase.client">TestClientScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestClientSmallReversedScanner.html#pool">pool</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestClientSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestClientSmallReversedScanner</a></dt>
@@ -21829,6 +21857,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure/TestProcedureCoordinator.html#procName">procName</a></span> - Static variable in class org.apache.hadoop.hbase.procedure.<a href="./org/apache/hadoop/hbase/procedure/TestProcedureCoordinator.html" title="class in org.apache.hadoop.hbase.procedure">TestProcedureCoordinator</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#procRunnables">procRunnables</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.html#procSleepInterval">procSleepInterval</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureRecovery</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#procsToAbort">procsToAbort</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureTestingUtility.InjectAbortOnLoadListener</a></dt>
@@ -23749,6 +23779,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#rollback">rollback</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#rollback(org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestProcEnv)">rollback(TestYieldProcedures.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MockedSplitTransaction.html#rollback(org.apache.hadoop.hbase.Server,%20org.apache.hadoop.hbase.regionserver.RegionServerServices)">rollback(Server, RegionServerServices)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MockedSplitTransaction.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.MockedSplitTransaction</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html#rollback(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">rollback(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController.TestTableDDLProcedure</a></dt>
@@ -25395,6 +25427,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html#serializeStateData(java.io.OutputStream)">serializeStateData(OutputStream)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureToString.BasicProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#serializeStateData(java.io.OutputStream)">serializeStateData(OutputStream)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html#serializeStateData(java.io.OutputStream)">serializeStateData(OutputStream)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="./org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController.TestTableDDLProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/crypto/aes/TestAES.TestProvider.html#serialVersionUID">serialVersionUID</a></span> - Static variable in class org.apache.hadoop.hbase.io.crypto.aes.<a href="./org/apache/hadoop/hbase/io/crypto/aes/TestAES.TestProvider.html" title="class in org.apache.hadoop.hbase.io.crypto.aes">TestAES.TestProvider</a></dt>
@@ -28394,6 +28428,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#step">step</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#step">step</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/chaos/monkies/CalmChaosMonkey.html#stop(java.lang.String)">stop(String)</a></span> - Method in class org.apache.hadoop.hbase.chaos.monkies.<a href="./org/apache/hadoop/hbase/chaos/monkies/CalmChaosMonkey.html" title="class in org.apache.hadoop.hbase.chaos.monkies">CalmChaosMonkey</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/chaos/monkies/ChaosMonkey.html#stop(java.lang.String)">stop(String)</a></span> - Method in class org.apache.hadoop.hbase.chaos.monkies.<a href="./org/apache/hadoop/hbase/chaos/monkies/ChaosMonkey.html" title="class in org.apache.hadoop.hbase.chaos.monkies">ChaosMonkey</a></dt>
@@ -36981,6 +37017,10 @@
 <div class="block">Test the case that the time limit for the scan is reached after each full row of cells is
  fetched.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#testHeartbeatWithSparseFilter()">testHeartbeatWithSparseFilter()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages</a></dt>
+<dd>
+<div class="block">Test the case that there is a filter which filters most of cells</div>
+</dd>
 <dt><a href="./org/apache/hbase/archetypes/exemplars/client/TestHelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client"><span class="strong">TestHelloHBase</span></a> - Class in <a href="./org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></dt>
 <dd>
 <div class="block">Unit testing for HelloHBase.</div>
@@ -43936,6 +43976,10 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html#TestScannerHeartbeatMessages.HeartbeatRPCServices(org.apache.hadoop.hbase.regionserver.HRegionServer)">TestScannerHeartbeatMessages.HeartbeatRPCServices(HRegionServer)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.HeartbeatRPCServices</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">TestScannerHeartbeatMessages.SparseFilter</span></a> - Class in <a href="./org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#TestScannerHeartbeatMessages.SparseFilter()">TestScannerHeartbeatMessages.SparseFilter()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.SparseFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestKeyValueHeap.html#testScannerLeak()">testScannerLeak()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestKeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">TestKeyValueHeap</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/rest/model/TestScannerModel.html" title="class in org.apache.hadoop.hbase.rest.model"><span class="strong">TestScannerModel</span></a> - Class in <a href="./org/apache/hadoop/hbase/rest/model/package-summary.html">org.apache.hadoop.hbase.rest.model</a></dt>
@@ -47601,6 +47645,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#testYieldEachExecutionStep()">testYieldEachExecutionStep()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#testYieldException()">testYieldException()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#testYieldOnInterrupt()">testYieldOnInterrupt()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures</span></a> - Class in <a href="./org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
@@ -47611,6 +47657,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html#TestYieldProcedures.TestProcEnv()">TestYieldProcedures.TestProcEnv()</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestRunQueue</span></a> - Class in <a href="./org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#TestYieldProcedures.TestRunQueue()">TestYieldProcedures.TestRunQueue()</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestStateMachineProcedure</span></a> - Class in <a href="./org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#TestYieldProcedures.TestStateMachineProcedure()">TestYieldProcedures.TestStateMachineProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure</a></dt>
@@ -47625,6 +47675,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html#TestYieldProcedures.TestStateMachineProcedure.State()">TestYieldProcedures.TestStateMachineProcedure.State()</a></span> - Constructor for enum org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestYieldProcedure</span></a> - Class in <a href="./org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html#TestYieldProcedures.TestYieldProcedure()">TestYieldProcedures.TestYieldProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBytes.html#testZero()">testZero()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBytes.html" title="class in org.apache.hadoop.hbase.util">TestBytes</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#testZeroByte()">testZeroByte()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html" title="class in org.apache.hadoop.hbase.io.encoding">TestDataBlockEncoders</a></dt>
@@ -51107,6 +51161,10 @@ the order they are declared.</div>
 </a>
 <h2 class="title">Y</h2>
 <dl>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#yield(org.apache.hadoop.hbase.procedure2.Procedure)">yield(Procedure)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#yieldCalls">yieldCalls</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestTableSnapshotScanner.html#yyy">yyy</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestTableSnapshotScanner.html" title="class in org.apache.hadoop.hbase.client">TestTableSnapshotScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#yyy">yyy</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="./org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableSnapshotInputFormat</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index a21d417..4b4ecf7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -153,9 +153,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestHFileBlockCompatibility.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TagUsage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCacheOnWrite.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestHFileBlockCompatibility.Writer.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.FaultyCreateTableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.FaultyCreateTableProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.FaultyCreateTableProcedure.html
index 59fa827..ae2fd50 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.FaultyCreateTableProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.FaultyCreateTableProcedure.html
@@ -219,7 +219,7 @@ extends org.apache.hadoop.hbase.master.procedure.CreateTableProcedure</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.procedure.CreateTableProcedure</h3>
-<code><clinit>, abort, acquireLock, addRegionsToMeta, addTableToMeta, assignRegions, createFsLayout, createFsLayout, deserializeStateData, executeFromState, getInitialState, getState, getStateId, getTableName, getTableOperationType, releaseLock, serializeStateData, setNextState, toStringClassDetails, updateTableDescCache</code></li>
+<code><clinit>, abort, acquireLock, addRegionsToMeta, addTableToMeta, assignRegions, createFsLayout, createFsLayout, deserializeStateData, executeFromState, getInitialState, getState, getStateId, getTableName, getTableOperationType, releaseLock, serializeStateData, setNextState, shouldWaitClientAck, toStringClassDetails, updateTableDescCache</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.procedure2.StateMachineProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 9ca1fc5..eb6f1fe 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
@@ -215,7 +215,7 @@ implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</pre
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">


[04/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
index e8e86bf..4be7696 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
@@ -25,526 +25,588 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertTrue;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.fail;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.Callable;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.commons.logging.Log;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.commons.logging.LogFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.impl.Log4JLogger;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Put;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Table;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.log4j.Level;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.After;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import com.google.protobuf.RpcController;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import com.google.protobuf.ServiceException;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * accumulated (potentially empty).<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category(MediumTests.class)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestScannerHeartbeatMessages {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private static Table TABLE = null;<a name="line.82"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.Callable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.impl.Log4JLogger;<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.Path;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableName;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Table;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.log4j.Level;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Before;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.BeforeClass;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>import com.google.protobuf.RpcController;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import com.google.protobuf.ServiceException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * accumulated (potentially empty).<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category(MediumTests.class)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>public class TestScannerHeartbeatMessages {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Table configuration<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static int NUM_ROWS = 10;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.91"></a>
+<span class="sourceLineNo">084</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static Table TABLE = null;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Table configuration<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static int NUM_FAMILIES = 3;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.95"></a>
+<span class="sourceLineNo">093</span>  private static int NUM_ROWS = 5;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static int NUM_QUALIFIERS = 3;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.99"></a>
+<span class="sourceLineNo">097</span>  private static int NUM_FAMILIES = 3;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static int VALUE_SIZE = 128;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // message to the client<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // reached<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @BeforeClass<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // Check the timeout condition after every cell<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    TEST_UTIL.startMiniCluster(1);<a name="line.132"></a>
+<span class="sourceLineNo">101</span>  private static int NUM_QUALIFIERS = 3;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static int VALUE_SIZE = 128;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // message to the client<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // reached<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  @BeforeClass<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static void setUpBeforeClass() throws Exception {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.132"></a>
 <span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    ht.put(puts);<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return ht;<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>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param rows<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param families<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param qualifiers<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param value<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      byte[] value) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Put put;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      put = new Put(rows[row]);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          put.add(kv);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      puts.add(put);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return puts;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @AfterClass<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public static void tearDownAfterClass() throws Exception {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Before<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public void setupBeforeTest() throws Exception {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    disableSleeping();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @After<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  public void teardownAfterTest() throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    disableSleeping();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * other due to changing static variables<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 testScannerHeartbeatMessages() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * disabled, the test should throw an exception.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param testCallable<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @throws InterruptedException<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      testCallable.call();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (Exception e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          + ExceptionUtils.getStackTrace(e));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    try {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      testCallable.call();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    } catch (Exception e) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    } finally {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * fetched.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return new Callable&lt;Void&gt;() {<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      public Void call() throws Exception {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // the case where a scan stops on the server side due to a time limit<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        Scan scan = new Scan();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        return null;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    };<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * @throws Exception<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return new Callable&lt;Void&gt;() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Void call() throws Exception {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        // the case where a scan stops on the server side due to a time limit<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        Scan baseScan = new Scan();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // fields may be changed such as start row<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        Scan scanCopy = new Scan(baseScan);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        scanCopy = new Scan(baseScan);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return null;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    };<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * necessary<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * @param scan The scan configuration being tested<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   *          that column family are fetched<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   */<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    disableSleeping();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Result r1 = null;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    Result r2 = null;<a name="line.295"></a>
+<span class="sourceLineNo">134</span>    // Check the timeout condition after every cell<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    TEST_UTIL.startMiniCluster(1);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ht.put(puts);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return ht;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param rows<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param families<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param qualifiers<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param value<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      byte[] value) throws IOException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Put put;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      put = new Put(rows[row]);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          put.add(kv);<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>      puts.add(put);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return puts;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @AfterClass<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static void tearDownAfterClass() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Before<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void setupBeforeTest() throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    disableSleeping();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @After<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void teardownAfterTest() throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    disableSleeping();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * other due to changing static variables<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  @Test<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void testScannerHeartbeatMessages() throws Exception {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    testImportanceOfHeartbeats(testHeartbeatWithSparseFilter());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * disabled, the test should throw an exception.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * @param testCallable<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @throws InterruptedException<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      testCallable.call();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (Exception e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          + ExceptionUtils.getStackTrace(e));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      testCallable.call();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    } catch (Exception e) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } finally {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * fetched.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @throws Exception<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return new Callable&lt;Void&gt;() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      public Void call() throws Exception {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // the case where a scan stops on the server side due to a time limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        Scan scan = new Scan();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return null;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    };<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @throws Exception<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return new Callable&lt;Void&gt;() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      public Void call() throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // the case where a scan stops on the server side due to a time limit<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        Scan baseScan = new Scan();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // fields may be changed such as start row<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        Scan scanCopy = new Scan(baseScan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        scanCopy = new Scan(baseScan);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    };<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static class SparseFilter extends FilterBase{<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        Thread.sleep(SERVER_TIME_LIMIT + 10);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      } catch (InterruptedException e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Thread.currentThread().interrupt();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ?<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          ReturnCode.INCLUDE :<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          ReturnCode.SKIP;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
 <span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    while ((r1 = scanner.next()) != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      r2 = scannerWithHeartbeats.next();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      disableSleeping();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>      assertTrue(r2 != null);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        Result.compareResults(r1, r2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      } catch (Exception e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        fail(e.getMessage());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    scanner.close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    scannerWithHeartbeats.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * is negative then that sleep will be disabled<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param rowSleepTime<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param cfSleepTime<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * Disable the sleeping mechanism server side.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static void disableSleeping() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      super(conf);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf, csm);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return new HeartbeatRPCServices(this);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">297</span>    public static Filter parseFrom(final byte [] pbBytes){<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return new SparseFilter();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Test the case that there is a filter which filters most of cells<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @throws Exception<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Callable&lt;Void&gt; testHeartbeatWithSparseFilter() throws Exception {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return new Callable&lt;Void&gt;() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Void call() throws Exception {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Scan scan = new Scan();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        scan.setFilter(new SparseFilter());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResultScanner scanner = TABLE.getScanner(scan);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        int num = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        while (scanner.next() != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          num++;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertEquals(1, num);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        scanner.close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>        scan = new Scan();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        scan.setFilter(new SparseFilter());<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        scan.setAllowPartialResults(true);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        scanner = TABLE.getScanner(scan);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        num = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        while (scanner.next() != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          num++;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        assertEquals(NUM_FAMILIES * NUM_QUALIFIERS, num);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        scanner.close();<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    };<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * necessary<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @param scan The scan configuration being tested<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   *          that column family are fetched<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws Exception<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    disableSleeping();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    Result r1 = null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    Result r2 = null;<a name="line.357"></a>
 <span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private static boolean heartbeatsEnabled = true;<a name="line.363"></a>
+<span class="sourceLineNo">359</span>    while ((r1 = scanner.next()) != null) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      r2 = scannerWithHeartbeats.next();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      disableSleeping();<a name="line.363"></a>
 <span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public HeartbeatRPCServices(HRegionServer rs) throws IOException {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      super(rs);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public ScanResponse scan(RpcController controller, ScanRequest request) <a name="line.370"></a>
-<span class="sourceLineNo">371</span>        throws ServiceException {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      ScanRequest.Builder builder = ScanRequest.newBuilder(request);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      builder.setClientHandlesHeartbeats(heartbeatsEnabled);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      return super.scan(controller, builder.build());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">365</span>      assertTrue(r2 != null);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        Result.compareResults(r1, r2);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      } catch (Exception e) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        fail(e.getMessage());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    scanner.close();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    scannerWithHeartbeats.close();<a name="line.375"></a>
 <span class="sourceLineNo">376</span>  }<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
 <span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Custom HRegion class that instantiates {@link RegionScanner}s with configurable sleep times<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * between fetches of row Results and/or column family cells. Useful for emulating an instance<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * where the server is taking a long time to process a client's scan request<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static class HeartbeatHRegion extends HRegion {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Row sleeps occur AFTER each row worth of cells is retrieved.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private static int rowSleepTime = DEFAULT_ROW_SLEEP_TIME;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private static boolean sleepBetweenRows = false;<a name="line.386"></a>
+<span class="sourceLineNo">379</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * is negative then that sleep will be disabled<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @param rowSleepTime<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @param cfSleepTime<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // The sleep for column families can be initiated before or after we fetch the cells for the<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    // column family. If the sleep occurs BEFORE then the time limits will be reached inside<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // StoreScanner while we are fetching individual cells. If the sleep occurs AFTER then the time<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // limit will be reached inside RegionScanner after all the cells for a column family have been<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // retrieved.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    private static boolean sleepBeforeColumnFamily = false;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    private static int columnFamilySleepTime = DEFAULT_CF_SLEEP_TIME;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    private static boolean sleepBetweenColumnFamilies = false;<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public HeartbeatHRegion(Path tableDir, WAL wal, FileSystem fs, Configuration confParam,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        HRegionInfo regionInfo, HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    public HeartbeatHRegion(HRegionFileSystem fs, WAL wal, Configuration confParam,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      super(fs, wal, confParam, htd, rsServices);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    private static void columnFamilySleep() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (HeartbeatHRegion.sleepBetweenColumnFamilies) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        try {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          Thread.sleep(HeartbeatHRegion.columnFamilySleepTime);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        } catch (InterruptedException e) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    private static void rowSleep() {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (HeartbeatHRegion.sleepBetweenRows) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          Thread.sleep(HeartbeatHRegion.rowSleepTime);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      } catch (InterruptedException e) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // Instantiate the custom heartbeat region scanners<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        List&lt;KeyValueScanner&gt; additionalScanners, boolean copyCells) throws IOException {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      if (scan.isReversed()) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (scan.getFilter() != null) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          scan.getFilter().setReversed(true);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        return new HeartbeatReversedRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return new HeartbeatRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Custom ReversedRegionScanner that can be configured to sleep between retrievals of row Results<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * and/or column family cells<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private static class HeartbeatReversedRegionScanner extends ReversedRegionScannerImpl {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    HeartbeatReversedRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        HRegion region, boolean copyCells) throws IOException {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      super(scan, additionalScanners, region, copyCells);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      HeartbeatHRegion.rowSleep();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      return moreRows;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.storeHeap = new HeartbeatReversedKVHeap(scanners, region.getCellCompartor());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!joinedScanners.isEmpty()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.joinedHeap = new HeartbeatReversedKVHeap(joinedScanners, region.getCellCompartor());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  /**<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * Custom RegionScanner that can be configured to sleep between retrievals of row Results and/or<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * column family cells<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  private static class HeartbeatRegionScanner extends RegionScannerImpl {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    HeartbeatRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        boolean copyCells) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      region.super(scan, additionalScanners, region, copyCells);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      HeartbeatHRegion.rowSleep();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return moreRows;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>    @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      this.storeHeap = new HeartbeatKVHeap(scanners, region.getCellCompartor());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (!joinedScanners.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.joinedHeap = new HeartbeatKVHeap(joinedScanners, region.getCellCompartor());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  /**<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * Custom KV Heap that can be configured to sleep/wait in between retrievals of column family<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * cells. Useful for testing<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private static final class HeartbeatKVHeap extends KeyValueHeap {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    public HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, CellComparator comparator)<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      super(scanners, comparator);<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>    HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, KVScannerComparator comparator)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        throws IOException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      super(scanners, comparator);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    @Override<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext context)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      boolean moreRows = super.next(result, context);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      if (!HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.515"></a>
+<span class="sourceLineNo">388</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * Disable the sleeping mechanism server side.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private static void disableSleeping() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super(conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      super(conf, csm);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return new HeartbeatRPCServices(this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.424"></a>
+<span class="sourceLineNo">425</span> 

<TRUNCATED>

[33/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 10be916..701ae83 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -173,1145 +173,1147 @@
 <span class="sourceLineNo">165</span>      final long evictTtl = conf.getInt(EVICT_TTL_CONF_KEY, DEFAULT_EVICT_TTL);<a name="line.165"></a>
 <span class="sourceLineNo">166</span>      final long evictAckTtl = conf.getInt(EVICT_ACKED_TTL_CONF_KEY, DEFAULT_ACKED_EVICT_TTL);<a name="line.166"></a>
 <span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        ProcedureInfo result = entry.getValue();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>        // TODO: Select TTL based on Procedure type<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        if ((result.hasClientAckTime() &amp;&amp; (now - result.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.175"></a>
-<span class="sourceLineNo">176</span>            (now - result.getLastUpdate()) &gt;= evictTtl) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          if (LOG.isDebugEnabled()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>            LOG.debug("Evict completed procedure " + entry.getKey());<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          store.delete(entry.getKey());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          it.remove();<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>          NonceKey nonceKey = result.getNonceKey();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          if (nonceKey != null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            nonceKeysToProcIdsMap.remove(nonceKey);<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>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>    @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      throw new UnsupportedOperationException();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    protected void rollback(final TEnvironment env) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throw new UnsupportedOperationException();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected boolean abort(final TEnvironment env) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      throw new UnsupportedOperationException();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    public void serializeStateData(final OutputStream stream) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public void deserializeStateData(final InputStream stream) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      throw new UnsupportedOperationException();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * This map contains every root procedure.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * or periodic procedures.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Queue that contains runnable procedures.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  private final ProcedureRunnableSet runnables;<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>  // TODO<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private final TEnvironment environment;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private final ProcedureStore store;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private final Configuration conf;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private Thread[] threads;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final ProcedureStore store) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    this.environment = environment;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    this.runnables = runqueue;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    this.store = store;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.conf = conf;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      public void setMaxProcId(long maxProcId) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        lastProcId.set(maxProcId);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>      @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        int corruptedCount = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        while (procIter.hasNext()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          LOG.error("corrupted procedure: " + proc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          corruptedCount++;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    });<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      final boolean abortOnCorruption) throws IOException {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // 1. Build the rollback stack<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    int runnablesCount = 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    while (procIter.hasNext()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      final NonceKey nonceKey;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      final long procId;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>      if (procIter.isNextCompleted()) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        nonceKey = proc.getNonceKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        procId = proc.getProcId();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        completed.put(proc.getProcId(), proc);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        if (isDebugEnabled) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } else {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        nonceKey = proc.getNonceKey();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        procId = proc.getProcId();<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>        if (!proc.hasParent()) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>        // add the procedure to the map<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        proc.beforeReplay(getEnvironment());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        procedures.put(proc.getProcId(), proc);<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          runnablesCount++;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>      // add the nonce to the map<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      if (nonceKey != null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // 2. Initialize the stacks<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    procIter.reset();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    while (procIter.hasNext()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      if (procIter.isNextCompleted()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        procIter.skipNext();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        continue;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (isDebugEnabled) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                    proc.getState(), proc.hasException(), proc));<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>      Long rootProcId = getRootProcedureId(proc);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (rootProcId == null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        runnables.addBack(proc);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (proc.hasParent() &amp;&amp; !proc.isFinished()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        Procedure parent = procedures.get(proc.getParentProcId());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        // corrupted procedures are handled later at step 3<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        if (parent != null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          parent.incChildrenLatch();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>      RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      procStack.loadStack(proc);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      switch (proc.getState()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        case RUNNABLE:<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          runnableList.add(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          break;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        case WAITING_TIMEOUT:<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          if (waitingSet == null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>            waitingSet = new HashSet&lt;Procedure&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          waitingSet.add(proc);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        case FINISHED:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (proc.hasException()) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // add the proc to the runnables to perform the rollback<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            runnables.addBack(proc);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            break;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        case ROLLEDBACK:<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        case INITIALIZING:<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          LOG.error(msg);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          throw new UnsupportedOperationException(msg);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        default:<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          break;<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><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    // 3. Validate the stacks<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    int corruptedCount = 0;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    while (itStack.hasNext()) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      RootProcedureState procStack = entry.getValue();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if (procStack.isValid()) continue;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>      for (Procedure proc: procStack.getSubprocedures()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        LOG.error("corrupted procedure: " + proc);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        procedures.remove(proc.getProcId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        runnableList.remove(proc);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        corruptedCount++;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      itStack.remove();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // 4. Push the runnables<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (!runnableList.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // some procedure may be started way before this stuff.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Procedure proc = runnableList.get(i);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        if (!proc.hasParent()) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        if (proc.wasExecuted()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          runnables.addFront(proc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        } else {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          // if it was not in execution, it can wait.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          runnables.addBack(proc);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * Start the procedure executor.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   *<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param numThreads number of threads available for procedure execution.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   */<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (running.getAndSet(true)) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      LOG.warn("Already running");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    // procedures and triggering periodic procedures.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    threads = new Thread[numThreads + 1];<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    LOG.info("Starting procedure executor threads=" + threads.length);<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    // Initialize procedures executor<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; numThreads; ++i) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      threads[i] = new Thread("ProcedureExecutor-" + i) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        public void run() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          execLoop();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      };<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Initialize procedures timeout handler (this is the +1 thread)<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    threads[numThreads] = new Thread("ProcedureExecutorTimeoutThread") {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      public void run() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        timeoutLoop();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    };<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // Acquire the store lease.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    store.recoverLease();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    load(abortOnCorruption);<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      threads[i].start();<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>    // Add completed cleaner<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    waitingTimeout.add(<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>  public void stop() {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (!running.getAndSet(false)) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    LOG.info("Stopping the procedure executor");<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    runnables.signalAll();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    waitingTimeout.signalAll();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  public void join() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    boolean interrupted = false;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        threads[i].join();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } catch (InterruptedException ex) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        interrupted = true;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    if (interrupted) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      Thread.currentThread().interrupt();<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    completed.clear();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    rollbackStack.clear();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    procedures.clear();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    nonceKeysToProcIdsMap.clear();<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    waitingTimeout.clear();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    runnables.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    lastProcId.set(-1);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  public boolean isRunning() {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    return running.get();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @return the number of execution threads.<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   */<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  public int getNumThreads() {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    return threads == null ? 0 : (threads.length - 1);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  public int getActiveExecutorCount() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return activeExecutorCount.get();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  public TEnvironment getEnvironment() {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    return this.environment;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public ProcedureStore getStore() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return this.store;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public void registerListener(ProcedureExecutorListener listener) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.listeners.add(listener);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>  public boolean unregisterListener(ProcedureExecutorListener listener) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return this.listeners.remove(listener);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * List procedures.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @return the procedures in a list<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  public List&lt;ProcedureInfo&gt; listProcedures() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    List&lt;ProcedureInfo&gt; procedureLists =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        new ArrayList&lt;ProcedureInfo&gt;(procedures.size() + completed.size());<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    for (java.util.Map.Entry&lt;Long, Procedure&gt; p: procedures.entrySet()) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      procedureLists.add(Procedure.createProcedureInfo(p.getValue(), null));<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    for (java.util.Map.Entry&lt;Long, ProcedureInfo&gt; e: completed.entrySet()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      // Note: The procedure could show up twice in the list with different state, as<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      // it could complete after we walk through procedures list and insert into<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      // procedureList - it is ok, as we will use the information in the ProcedureInfo<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      // to figure it out; to prevent this would increase the complexity of the logic.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      procedureLists.add(e.getValue());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return procedureLists;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * Add a new root-procedure to the executor.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param proc the new procedure to execute.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public long submitProcedure(final Procedure proc) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return submitProcedure(proc, HConstants.NO_NONCE, HConstants.NO_NONCE);<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>  /**<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Add a new root-procedure to the executor.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param proc the new procedure to execute.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param nonceGroup<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @param nonce<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   */<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  public long submitProcedure(<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Procedure proc,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      final long nonceGroup,<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      final long nonce) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    Preconditions.checkArgument(isRunning());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    Preconditions.checkArgument(!proc.hasParent());<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    Long currentProcId;<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span>    // The following part of the code has to be synchronized to prevent multiple request<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    // with the same nonce to execute at the same time.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    synchronized (this) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Check whether the proc exists.  If exist, just return the proc id.<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // This is to prevent the same proc to submit multiple times (it could happen<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // when client could not talk to server and resubmit the same request).<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      NonceKey noncekey = null;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      if (nonce != HConstants.NO_NONCE) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        noncekey = new NonceKey(nonceGroup, nonce);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        currentProcId = nonceKeysToProcIdsMap.get(noncekey);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        if (currentProcId != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // Found the proc<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return currentProcId;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>      // Initialize the Procedure ID<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      currentProcId = nextProcId();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      proc.setProcId(currentProcId);<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // This is new procedure. Set the noncekey and insert into the map.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      if (noncekey != null) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        proc.setNonceKey(noncekey);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        nonceKeysToProcIdsMap.put(noncekey, currentProcId);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    } // end of synchronized (this)<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    // Commit the transaction<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    store.insert(proc, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    if (LOG.isDebugEnabled()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      LOG.debug("Procedure " + proc + " added to the store.");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>    // Create the rollback stack for the procedure<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    RootProcedureState stack = new RootProcedureState();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    rollbackStack.put(currentProcId, stack);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    // Submit the new subprocedures<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    assert !procedures.containsKey(currentProcId);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    procedures.put(currentProcId, proc);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    sendProcedureAddedNotification(currentProcId);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    runnables.addBack(proc);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    return currentProcId;<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>  public ProcedureInfo getResult(final long procId) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return completed.get(procId);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Return true if the procedure is finished.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * The state may be "completed successfully" or "failed and rolledback".<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Use getResult() to check the state or get the result data.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param procId the ID of the procedure to check<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return true if the procedure execution is finished, otherwise false.<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   */<a name="line.694"></a>
-<span class="sourceLineNo">695</span>  public boolean isFinished(final long procId) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return completed.containsKey(procId);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  /**<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * Return true if the procedure is started.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * @param procId the ID of the procedure to check<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * @return true if the procedure execution is started, otherwise false.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>  public boolean isStarted(final long procId) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    Procedure proc = procedures.get(procId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (proc == null) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      return completed.get(procId) != null;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    return proc.wasExecuted();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>  }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>  /**<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * Mark the specified completed procedure, as ready to remove.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param procId the ID of the procedure to remove<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public void removeResult(final long procId) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    ProcedureInfo result = completed.get(procId);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    if (result == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      assert !procedures.containsKey(procId) : "procId=" + procId + " is still running";<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (LOG.isDebugEnabled()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        LOG.debug("Procedure procId=" + procId + " already removed by the cleaner.");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span>    // The CompletedProcedureCleaner will take care of deletion, once the TTL is expired.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    result.setClientAckTime(EnvironmentEdgeManager.currentTime());<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Send an abort notification the specified procedure.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * @param procId the procedure to abort<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   */<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public boolean abort(final long procId) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return abort(procId, true);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Send an abort notification the specified procedure.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param procId the procedure to abort<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    Procedure proc = procedures.get(procId);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (proc != null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return false;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      } else {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        return proc.abort(getEnvironment());<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    return false;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span>  /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Check if the user is this procedure's owner<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * @param procId the target procedure<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param user the user<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @return true if the user is the owner of the procedure,<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   *   false otherwise or the owner is unknown.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public boolean isProcedureOwner(final long procId, final User user) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    if (user == null) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      return false;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    Procedure proc = procedures.get(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    if (proc != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return proc.getOwner().equals(user.getShortName());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    ProcedureInfo procInfo = completed.get(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (procInfo == null) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      // Procedure either does not exist or has already completed and got cleaned up.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // At this time, we cannot check the owner of the procedure<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      return false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    return ProcedureInfo.isProcedureOwner(procInfo, user);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  public Map&lt;Long, ProcedureInfo&gt; getResults() {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    return Collections.unmodifiableMap(completed);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>  public Procedure getProcedure(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    return procedures.get(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  protected ProcedureRunnableSet getRunnableSet() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return runnables;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  /**<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * Execution loop (N threads)<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * while the executor is in a running state,<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * fetch a procedure from the runnables queue and start the execution.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  private void execLoop() {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      Procedure proc = runnables.poll();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      if (proc == null) continue;<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>      try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        activeExecutorCount.incrementAndGet();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        execLoop(proc);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      } finally {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        activeExecutorCount.decrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  private void execLoop(Procedure proc) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (LOG.isTraceEnabled()) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      LOG.trace("Trying to start the execution of " + proc);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>    Long rootProcId = getRootProcedureId(proc);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    if (rootProcId == null) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      // The 'proc' was ready to run but the root procedure was rolledback<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      executeRollback(proc);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    if (procStack == null) return;<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>    do {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      // Try to acquire the execution<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      if (!procStack.acquire(proc)) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        if (procStack.setRollback()) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          // we have the 'rollback-lock' we can start rollingback<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (!executeRollback(rootProcId, procStack)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            procStack.unsetRollback();<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            runnables.yield(proc);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        } else {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          // if we can't rollback means that some child is still running.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // the rollback will be executed after all the children are done.<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // If the procedure was never executed, remove and mark it as rolledback.<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          if (!proc.wasExecuted()) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            if (!executeRollback(proc)) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>              runnables.yield(proc);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        break;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>      // Execute the procedure<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      assert proc.getState() == ProcedureState.RUNNABLE;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      if (proc.acquireLock(getEnvironment())) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        execProcedure(procStack, proc);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        proc.releaseLock(getEnvironment());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      } else {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        runnables.yield(proc);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      procStack.release(proc);<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span>      // allows to kill the executor before something is stored to the wal.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>      // useful to test the procedure recovery.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      if (testing != null &amp;&amp; !isRunning()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        break;<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
-<span class="sourceLineNo">867</span><a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (proc.isSuccess()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        if (LOG.isDebugEnabled()) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          LOG.debug("Procedure completed in " +<a name="line.870"></a>
-<span class="sourceLineNo">871</span>              StringUtils.humanTimeDiff(proc.elapsedTime()) + ": " + proc);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>        }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        // Finalize the procedure state<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        if (proc.getProcId() == rootProcId) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          procedureFinished(proc);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        break;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        runnables.yield(proc);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        break;<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    } while (procStack.isFailed());<a name="line.885"></a>
-<span class="sourceLineNo">886</span>  }<a name="line.886"></a>
+<span class="sourceLineNo">168</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      final Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        final Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        final ProcedureInfo procInfo = entry.getValue();<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>        // TODO: Select TTL based on Procedure type<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        if ((procInfo.hasClientAckTime() &amp;&amp; (now - procInfo.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            (now - procInfo.getLastUpdate()) &gt;= evictTtl) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          if (isDebugEnabled) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>            LOG.debug("Evict completed procedure: " + procInfo);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          store.delete(entry.getKey());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          it.remove();<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>          NonceKey nonceKey = procInfo.getNonceKey();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          if (nonceKey != null) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new UnsupportedOperationException();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    protected void rollback(final TEnvironment env) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throw new UnsupportedOperationException();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    protected boolean abort(final TEnvironment env) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      throw new UnsupportedOperationException();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>    @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public void serializeStateData(final OutputStream stream) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    public void deserializeStateData(final InputStream stream) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      throw new UnsupportedOperationException();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * This map contains every root procedure.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * or periodic procedures.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<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>   * Queue that contains runnable procedures.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private final ProcedureRunnableSet runnables;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  // TODO<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  private final TEnvironment environment;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  private final ProcedureStore store;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private final Configuration conf;<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private Thread[] threads;<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      final ProcedureStore store) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    this.environment = environment;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    this.runnables = runqueue;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    this.store = store;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.conf = conf;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      public void setMaxProcId(long maxProcId) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        lastProcId.set(maxProcId);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>      @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        int corruptedCount = 0;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        while (procIter.hasNext()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          LOG.error("corrupted procedure: " + proc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          corruptedCount++;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    });<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      final boolean abortOnCorruption) throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    // 1. Build the rollback stack<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    int runnablesCount = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    while (procIter.hasNext()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      final NonceKey nonceKey;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      final long procId;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      if (procIter.isNextCompleted()) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        nonceKey = proc.getNonceKey();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        procId = proc.getProcId();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        completed.put(proc.getProcId(), proc);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (isDebugEnabled) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      } else {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        nonceKey = proc.getNonceKey();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        procId = proc.getProcId();<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>        if (!proc.hasParent()) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // add the procedure to the map<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        proc.beforeReplay(getEnvironment());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        procedures.put(proc.getProcId(), proc);<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          runnablesCount++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // add the nonce to the map<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      if (nonceKey != null) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // 2. Initialize the stacks<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    procIter.reset();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    while (procIter.hasNext()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (procIter.isNextCompleted()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        procIter.skipNext();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        continue;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (isDebugEnabled) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                    proc.getState(), proc.hasException(), proc));<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      }<a name="line.382"></a>
+<spa

<TRUNCATED>

[28/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN

<TRUNCATED>

[36/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 10be916..701ae83 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
@@ -173,1145 +173,1147 @@
 <span class="sourceLineNo">165</span>      final long evictTtl = conf.getInt(EVICT_TTL_CONF_KEY, DEFAULT_EVICT_TTL);<a name="line.165"></a>
 <span class="sourceLineNo">166</span>      final long evictAckTtl = conf.getInt(EVICT_ACKED_TTL_CONF_KEY, DEFAULT_ACKED_EVICT_TTL);<a name="line.166"></a>
 <span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        ProcedureInfo result = entry.getValue();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>        // TODO: Select TTL based on Procedure type<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        if ((result.hasClientAckTime() &amp;&amp; (now - result.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.175"></a>
-<span class="sourceLineNo">176</span>            (now - result.getLastUpdate()) &gt;= evictTtl) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          if (LOG.isDebugEnabled()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>            LOG.debug("Evict completed procedure " + entry.getKey());<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          store.delete(entry.getKey());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          it.remove();<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>          NonceKey nonceKey = result.getNonceKey();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          if (nonceKey != null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            nonceKeysToProcIdsMap.remove(nonceKey);<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>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>    @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      throw new UnsupportedOperationException();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    protected void rollback(final TEnvironment env) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throw new UnsupportedOperationException();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected boolean abort(final TEnvironment env) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      throw new UnsupportedOperationException();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    public void serializeStateData(final OutputStream stream) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public void deserializeStateData(final InputStream stream) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      throw new UnsupportedOperationException();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * This map contains every root procedure.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * or periodic procedures.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Queue that contains runnable procedures.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  private final ProcedureRunnableSet runnables;<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>  // TODO<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private final TEnvironment environment;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private final ProcedureStore store;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private final Configuration conf;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private Thread[] threads;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final ProcedureStore store) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    this.environment = environment;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    this.runnables = runqueue;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    this.store = store;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.conf = conf;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      public void setMaxProcId(long maxProcId) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        lastProcId.set(maxProcId);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>      @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        int corruptedCount = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        while (procIter.hasNext()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          LOG.error("corrupted procedure: " + proc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          corruptedCount++;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    });<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      final boolean abortOnCorruption) throws IOException {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // 1. Build the rollback stack<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    int runnablesCount = 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    while (procIter.hasNext()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      final NonceKey nonceKey;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      final long procId;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>      if (procIter.isNextCompleted()) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        nonceKey = proc.getNonceKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        procId = proc.getProcId();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        completed.put(proc.getProcId(), proc);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        if (isDebugEnabled) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } else {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        nonceKey = proc.getNonceKey();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        procId = proc.getProcId();<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>        if (!proc.hasParent()) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>        // add the procedure to the map<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        proc.beforeReplay(getEnvironment());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        procedures.put(proc.getProcId(), proc);<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          runnablesCount++;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>      // add the nonce to the map<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      if (nonceKey != null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // 2. Initialize the stacks<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    procIter.reset();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    while (procIter.hasNext()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      if (procIter.isNextCompleted()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        procIter.skipNext();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        continue;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (isDebugEnabled) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                    proc.getState(), proc.hasException(), proc));<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>      Long rootProcId = getRootProcedureId(proc);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (rootProcId == null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        runnables.addBack(proc);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (proc.hasParent() &amp;&amp; !proc.isFinished()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        Procedure parent = procedures.get(proc.getParentProcId());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        // corrupted procedures are handled later at step 3<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        if (parent != null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          parent.incChildrenLatch();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>      RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      procStack.loadStack(proc);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      switch (proc.getState()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        case RUNNABLE:<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          runnableList.add(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          break;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        case WAITING_TIMEOUT:<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          if (waitingSet == null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>            waitingSet = new HashSet&lt;Procedure&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          waitingSet.add(proc);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        case FINISHED:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (proc.hasException()) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // add the proc to the runnables to perform the rollback<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            runnables.addBack(proc);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            break;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        case ROLLEDBACK:<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        case INITIALIZING:<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          LOG.error(msg);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          throw new UnsupportedOperationException(msg);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        default:<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          break;<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><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    // 3. Validate the stacks<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    int corruptedCount = 0;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    while (itStack.hasNext()) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      RootProcedureState procStack = entry.getValue();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if (procStack.isValid()) continue;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>      for (Procedure proc: procStack.getSubprocedures()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        LOG.error("corrupted procedure: " + proc);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        procedures.remove(proc.getProcId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        runnableList.remove(proc);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        corruptedCount++;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      itStack.remove();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // 4. Push the runnables<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (!runnableList.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // some procedure may be started way before this stuff.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Procedure proc = runnableList.get(i);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        if (!proc.hasParent()) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        if (proc.wasExecuted()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          runnables.addFront(proc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        } else {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          // if it was not in execution, it can wait.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          runnables.addBack(proc);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * Start the procedure executor.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   *<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param numThreads number of threads available for procedure execution.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   */<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (running.getAndSet(true)) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      LOG.warn("Already running");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    // procedures and triggering periodic procedures.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    threads = new Thread[numThreads + 1];<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    LOG.info("Starting procedure executor threads=" + threads.length);<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    // Initialize procedures executor<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; numThreads; ++i) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      threads[i] = new Thread("ProcedureExecutor-" + i) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        public void run() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          execLoop();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      };<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Initialize procedures timeout handler (this is the +1 thread)<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    threads[numThreads] = new Thread("ProcedureExecutorTimeoutThread") {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      public void run() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        timeoutLoop();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    };<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // Acquire the store lease.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    store.recoverLease();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    load(abortOnCorruption);<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      threads[i].start();<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>    // Add completed cleaner<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    waitingTimeout.add(<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>  public void stop() {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (!running.getAndSet(false)) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    LOG.info("Stopping the procedure executor");<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    runnables.signalAll();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    waitingTimeout.signalAll();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  public void join() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    boolean interrupted = false;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        threads[i].join();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } catch (InterruptedException ex) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        interrupted = true;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    if (interrupted) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      Thread.currentThread().interrupt();<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    completed.clear();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    rollbackStack.clear();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    procedures.clear();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    nonceKeysToProcIdsMap.clear();<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    waitingTimeout.clear();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    runnables.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    lastProcId.set(-1);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  public boolean isRunning() {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    return running.get();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @return the number of execution threads.<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   */<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  public int getNumThreads() {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    return threads == null ? 0 : (threads.length - 1);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  public int getActiveExecutorCount() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return activeExecutorCount.get();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  public TEnvironment getEnvironment() {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    return this.environment;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public ProcedureStore getStore() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return this.store;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public void registerListener(ProcedureExecutorListener listener) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.listeners.add(listener);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>  public boolean unregisterListener(ProcedureExecutorListener listener) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return this.listeners.remove(listener);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * List procedures.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @return the procedures in a list<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  public List&lt;ProcedureInfo&gt; listProcedures() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    List&lt;ProcedureInfo&gt; procedureLists =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        new ArrayList&lt;ProcedureInfo&gt;(procedures.size() + completed.size());<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    for (java.util.Map.Entry&lt;Long, Procedure&gt; p: procedures.entrySet()) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      procedureLists.add(Procedure.createProcedureInfo(p.getValue(), null));<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    for (java.util.Map.Entry&lt;Long, ProcedureInfo&gt; e: completed.entrySet()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      // Note: The procedure could show up twice in the list with different state, as<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      // it could complete after we walk through procedures list and insert into<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      // procedureList - it is ok, as we will use the information in the ProcedureInfo<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      // to figure it out; to prevent this would increase the complexity of the logic.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      procedureLists.add(e.getValue());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return procedureLists;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * Add a new root-procedure to the executor.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param proc the new procedure to execute.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public long submitProcedure(final Procedure proc) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return submitProcedure(proc, HConstants.NO_NONCE, HConstants.NO_NONCE);<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>  /**<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Add a new root-procedure to the executor.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param proc the new procedure to execute.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param nonceGroup<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @param nonce<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   */<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  public long submitProcedure(<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Procedure proc,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      final long nonceGroup,<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      final long nonce) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    Preconditions.checkArgument(isRunning());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    Preconditions.checkArgument(!proc.hasParent());<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    Long currentProcId;<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span>    // The following part of the code has to be synchronized to prevent multiple request<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    // with the same nonce to execute at the same time.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    synchronized (this) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Check whether the proc exists.  If exist, just return the proc id.<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // This is to prevent the same proc to submit multiple times (it could happen<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // when client could not talk to server and resubmit the same request).<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      NonceKey noncekey = null;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      if (nonce != HConstants.NO_NONCE) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        noncekey = new NonceKey(nonceGroup, nonce);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        currentProcId = nonceKeysToProcIdsMap.get(noncekey);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        if (currentProcId != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // Found the proc<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return currentProcId;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>      // Initialize the Procedure ID<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      currentProcId = nextProcId();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      proc.setProcId(currentProcId);<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // This is new procedure. Set the noncekey and insert into the map.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      if (noncekey != null) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        proc.setNonceKey(noncekey);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        nonceKeysToProcIdsMap.put(noncekey, currentProcId);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    } // end of synchronized (this)<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    // Commit the transaction<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    store.insert(proc, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    if (LOG.isDebugEnabled()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      LOG.debug("Procedure " + proc + " added to the store.");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>    // Create the rollback stack for the procedure<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    RootProcedureState stack = new RootProcedureState();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    rollbackStack.put(currentProcId, stack);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    // Submit the new subprocedures<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    assert !procedures.containsKey(currentProcId);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    procedures.put(currentProcId, proc);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    sendProcedureAddedNotification(currentProcId);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    runnables.addBack(proc);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    return currentProcId;<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>  public ProcedureInfo getResult(final long procId) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return completed.get(procId);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Return true if the procedure is finished.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * The state may be "completed successfully" or "failed and rolledback".<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Use getResult() to check the state or get the result data.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param procId the ID of the procedure to check<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return true if the procedure execution is finished, otherwise false.<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   */<a name="line.694"></a>
-<span class="sourceLineNo">695</span>  public boolean isFinished(final long procId) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return completed.containsKey(procId);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  /**<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * Return true if the procedure is started.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * @param procId the ID of the procedure to check<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * @return true if the procedure execution is started, otherwise false.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>  public boolean isStarted(final long procId) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    Procedure proc = procedures.get(procId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (proc == null) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      return completed.get(procId) != null;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    return proc.wasExecuted();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>  }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>  /**<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * Mark the specified completed procedure, as ready to remove.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param procId the ID of the procedure to remove<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public void removeResult(final long procId) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    ProcedureInfo result = completed.get(procId);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    if (result == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      assert !procedures.containsKey(procId) : "procId=" + procId + " is still running";<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (LOG.isDebugEnabled()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        LOG.debug("Procedure procId=" + procId + " already removed by the cleaner.");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span>    // The CompletedProcedureCleaner will take care of deletion, once the TTL is expired.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    result.setClientAckTime(EnvironmentEdgeManager.currentTime());<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Send an abort notification the specified procedure.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * @param procId the procedure to abort<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   */<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public boolean abort(final long procId) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return abort(procId, true);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Send an abort notification the specified procedure.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param procId the procedure to abort<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    Procedure proc = procedures.get(procId);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (proc != null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return false;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      } else {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        return proc.abort(getEnvironment());<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    return false;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span>  /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Check if the user is this procedure's owner<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * @param procId the target procedure<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param user the user<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @return true if the user is the owner of the procedure,<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   *   false otherwise or the owner is unknown.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public boolean isProcedureOwner(final long procId, final User user) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    if (user == null) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      return false;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    Procedure proc = procedures.get(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    if (proc != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return proc.getOwner().equals(user.getShortName());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    ProcedureInfo procInfo = completed.get(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (procInfo == null) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      // Procedure either does not exist or has already completed and got cleaned up.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // At this time, we cannot check the owner of the procedure<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      return false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    return ProcedureInfo.isProcedureOwner(procInfo, user);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  public Map&lt;Long, ProcedureInfo&gt; getResults() {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    return Collections.unmodifiableMap(completed);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>  public Procedure getProcedure(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    return procedures.get(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  protected ProcedureRunnableSet getRunnableSet() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return runnables;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  /**<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * Execution loop (N threads)<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * while the executor is in a running state,<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * fetch a procedure from the runnables queue and start the execution.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  private void execLoop() {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      Procedure proc = runnables.poll();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      if (proc == null) continue;<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>      try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        activeExecutorCount.incrementAndGet();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        execLoop(proc);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      } finally {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        activeExecutorCount.decrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  private void execLoop(Procedure proc) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (LOG.isTraceEnabled()) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      LOG.trace("Trying to start the execution of " + proc);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>    Long rootProcId = getRootProcedureId(proc);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    if (rootProcId == null) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      // The 'proc' was ready to run but the root procedure was rolledback<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      executeRollback(proc);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    if (procStack == null) return;<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>    do {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      // Try to acquire the execution<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      if (!procStack.acquire(proc)) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        if (procStack.setRollback()) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          // we have the 'rollback-lock' we can start rollingback<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (!executeRollback(rootProcId, procStack)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            procStack.unsetRollback();<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            runnables.yield(proc);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        } else {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          // if we can't rollback means that some child is still running.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // the rollback will be executed after all the children are done.<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // If the procedure was never executed, remove and mark it as rolledback.<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          if (!proc.wasExecuted()) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            if (!executeRollback(proc)) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>              runnables.yield(proc);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        break;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>      // Execute the procedure<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      assert proc.getState() == ProcedureState.RUNNABLE;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      if (proc.acquireLock(getEnvironment())) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        execProcedure(procStack, proc);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        proc.releaseLock(getEnvironment());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      } else {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        runnables.yield(proc);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      procStack.release(proc);<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span>      // allows to kill the executor before something is stored to the wal.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>      // useful to test the procedure recovery.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      if (testing != null &amp;&amp; !isRunning()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        break;<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
-<span class="sourceLineNo">867</span><a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (proc.isSuccess()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        if (LOG.isDebugEnabled()) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          LOG.debug("Procedure completed in " +<a name="line.870"></a>
-<span class="sourceLineNo">871</span>              StringUtils.humanTimeDiff(proc.elapsedTime()) + ": " + proc);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>        }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        // Finalize the procedure state<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        if (proc.getProcId() == rootProcId) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          procedureFinished(proc);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        break;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        runnables.yield(proc);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        break;<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    } while (procStack.isFailed());<a name="line.885"></a>
-<span class="sourceLineNo">886</span>  }<a name="line.886"></a>
+<span class="sourceLineNo">168</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      final Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        final Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        final ProcedureInfo procInfo = entry.getValue();<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>        // TODO: Select TTL based on Procedure type<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        if ((procInfo.hasClientAckTime() &amp;&amp; (now - procInfo.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            (now - procInfo.getLastUpdate()) &gt;= evictTtl) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          if (isDebugEnabled) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>            LOG.debug("Evict completed procedure: " + procInfo);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          store.delete(entry.getKey());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          it.remove();<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>          NonceKey nonceKey = procInfo.getNonceKey();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          if (nonceKey != null) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new UnsupportedOperationException();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    protected void rollback(final TEnvironment env) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throw new UnsupportedOperationException();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    protected boolean abort(final TEnvironment env) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      throw new UnsupportedOperationException();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>    @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public void serializeStateData(final OutputStream stream) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    public void deserializeStateData(final InputStream stream) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      throw new UnsupportedOperationException();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * This map contains every root procedure.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * or periodic procedures.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<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>   * Queue that contains runnable procedures.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private final ProcedureRunnableSet runnables;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  // TODO<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  private final TEnvironment environment;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  private final ProcedureStore store;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private final Configuration conf;<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private Thread[] threads;<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      final ProcedureStore store) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    this.environment = environment;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    this.runnables = runqueue;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    this.store = store;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.conf = conf;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      public void setMaxProcId(long maxProcId) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        lastProcId.set(maxProcId);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>      @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        int corruptedCount = 0;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        while (procIter.hasNext()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          LOG.error("corrupted procedure: " + proc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          corruptedCount++;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    });<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      final boolean abortOnCorruption) throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    // 1. Build the rollback stack<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    int runnablesCount = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    while (procIter.hasNext()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      final NonceKey nonceKey;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      final long procId;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      if (procIter.isNextCompleted()) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        nonceKey = proc.getNonceKey();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        procId = proc.getProcId();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        completed.put(proc.getProcId(), proc);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (isDebugEnabled) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      } else {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        nonceKey = proc.getNonceKey();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        procId = proc.getProcId();<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>        if (!proc.hasParent()) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // add the procedure to the map<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        proc.beforeReplay(getEnvironment());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        procedures.put(proc.getProcId(), proc);<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          runnablesCount++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // add the nonce to the map<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      if (nonceKey != null) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // 2. Initialize the stacks<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    procIter.reset();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    while (procIter.hasNext()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (procIter.isNextCompleted()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        procIter.skipNext();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        continue;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (isDebugEnabled) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                    proc.getState

<TRUNCATED>

[35/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureTimeoutRetriever.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureTimeoutRetriever.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureTimeoutRetriever.html
index 10be916..701ae83 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureTimeoutRetriever.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureTimeoutRetriever.html
@@ -173,1145 +173,1147 @@
 <span class="sourceLineNo">165</span>      final long evictTtl = conf.getInt(EVICT_TTL_CONF_KEY, DEFAULT_EVICT_TTL);<a name="line.165"></a>
 <span class="sourceLineNo">166</span>      final long evictAckTtl = conf.getInt(EVICT_ACKED_TTL_CONF_KEY, DEFAULT_ACKED_EVICT_TTL);<a name="line.166"></a>
 <span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        ProcedureInfo result = entry.getValue();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>        // TODO: Select TTL based on Procedure type<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        if ((result.hasClientAckTime() &amp;&amp; (now - result.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.175"></a>
-<span class="sourceLineNo">176</span>            (now - result.getLastUpdate()) &gt;= evictTtl) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          if (LOG.isDebugEnabled()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>            LOG.debug("Evict completed procedure " + entry.getKey());<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          store.delete(entry.getKey());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          it.remove();<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>          NonceKey nonceKey = result.getNonceKey();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          if (nonceKey != null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            nonceKeysToProcIdsMap.remove(nonceKey);<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>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>    @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      throw new UnsupportedOperationException();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    protected void rollback(final TEnvironment env) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throw new UnsupportedOperationException();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected boolean abort(final TEnvironment env) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      throw new UnsupportedOperationException();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    public void serializeStateData(final OutputStream stream) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public void deserializeStateData(final InputStream stream) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      throw new UnsupportedOperationException();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * This map contains every root procedure.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * or periodic procedures.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Queue that contains runnable procedures.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  private final ProcedureRunnableSet runnables;<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>  // TODO<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private final TEnvironment environment;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private final ProcedureStore store;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private final Configuration conf;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private Thread[] threads;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final ProcedureStore store) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    this.environment = environment;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    this.runnables = runqueue;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    this.store = store;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.conf = conf;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      public void setMaxProcId(long maxProcId) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        lastProcId.set(maxProcId);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>      @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        int corruptedCount = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        while (procIter.hasNext()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          LOG.error("corrupted procedure: " + proc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          corruptedCount++;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    });<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      final boolean abortOnCorruption) throws IOException {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // 1. Build the rollback stack<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    int runnablesCount = 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    while (procIter.hasNext()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      final NonceKey nonceKey;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      final long procId;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>      if (procIter.isNextCompleted()) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        nonceKey = proc.getNonceKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        procId = proc.getProcId();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        completed.put(proc.getProcId(), proc);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        if (isDebugEnabled) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } else {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        nonceKey = proc.getNonceKey();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        procId = proc.getProcId();<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>        if (!proc.hasParent()) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>        // add the procedure to the map<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        proc.beforeReplay(getEnvironment());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        procedures.put(proc.getProcId(), proc);<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          runnablesCount++;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>      // add the nonce to the map<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      if (nonceKey != null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // 2. Initialize the stacks<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    procIter.reset();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    while (procIter.hasNext()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      if (procIter.isNextCompleted()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        procIter.skipNext();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        continue;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (isDebugEnabled) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                    proc.getState(), proc.hasException(), proc));<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>      Long rootProcId = getRootProcedureId(proc);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (rootProcId == null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        runnables.addBack(proc);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (proc.hasParent() &amp;&amp; !proc.isFinished()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        Procedure parent = procedures.get(proc.getParentProcId());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        // corrupted procedures are handled later at step 3<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        if (parent != null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          parent.incChildrenLatch();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>      RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      procStack.loadStack(proc);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      switch (proc.getState()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        case RUNNABLE:<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          runnableList.add(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          break;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        case WAITING_TIMEOUT:<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          if (waitingSet == null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>            waitingSet = new HashSet&lt;Procedure&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          waitingSet.add(proc);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        case FINISHED:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (proc.hasException()) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // add the proc to the runnables to perform the rollback<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            runnables.addBack(proc);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            break;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        case ROLLEDBACK:<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        case INITIALIZING:<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          LOG.error(msg);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          throw new UnsupportedOperationException(msg);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        default:<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          break;<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><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    // 3. Validate the stacks<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    int corruptedCount = 0;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    while (itStack.hasNext()) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      RootProcedureState procStack = entry.getValue();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if (procStack.isValid()) continue;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>      for (Procedure proc: procStack.getSubprocedures()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        LOG.error("corrupted procedure: " + proc);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        procedures.remove(proc.getProcId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        runnableList.remove(proc);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        corruptedCount++;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      itStack.remove();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // 4. Push the runnables<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (!runnableList.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // some procedure may be started way before this stuff.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Procedure proc = runnableList.get(i);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        if (!proc.hasParent()) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        if (proc.wasExecuted()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          runnables.addFront(proc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        } else {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          // if it was not in execution, it can wait.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          runnables.addBack(proc);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * Start the procedure executor.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   *<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param numThreads number of threads available for procedure execution.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   */<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (running.getAndSet(true)) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      LOG.warn("Already running");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    // procedures and triggering periodic procedures.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    threads = new Thread[numThreads + 1];<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    LOG.info("Starting procedure executor threads=" + threads.length);<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    // Initialize procedures executor<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; numThreads; ++i) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      threads[i] = new Thread("ProcedureExecutor-" + i) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        public void run() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          execLoop();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      };<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Initialize procedures timeout handler (this is the +1 thread)<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    threads[numThreads] = new Thread("ProcedureExecutorTimeoutThread") {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      public void run() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        timeoutLoop();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    };<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // Acquire the store lease.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    store.recoverLease();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    load(abortOnCorruption);<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      threads[i].start();<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>    // Add completed cleaner<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    waitingTimeout.add(<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>  public void stop() {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (!running.getAndSet(false)) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    LOG.info("Stopping the procedure executor");<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    runnables.signalAll();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    waitingTimeout.signalAll();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  public void join() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    boolean interrupted = false;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        threads[i].join();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } catch (InterruptedException ex) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        interrupted = true;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    if (interrupted) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      Thread.currentThread().interrupt();<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    completed.clear();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    rollbackStack.clear();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    procedures.clear();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    nonceKeysToProcIdsMap.clear();<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    waitingTimeout.clear();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    runnables.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    lastProcId.set(-1);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  public boolean isRunning() {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    return running.get();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @return the number of execution threads.<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   */<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  public int getNumThreads() {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    return threads == null ? 0 : (threads.length - 1);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  public int getActiveExecutorCount() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return activeExecutorCount.get();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  public TEnvironment getEnvironment() {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    return this.environment;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public ProcedureStore getStore() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return this.store;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public void registerListener(ProcedureExecutorListener listener) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.listeners.add(listener);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>  public boolean unregisterListener(ProcedureExecutorListener listener) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return this.listeners.remove(listener);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * List procedures.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @return the procedures in a list<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  public List&lt;ProcedureInfo&gt; listProcedures() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    List&lt;ProcedureInfo&gt; procedureLists =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        new ArrayList&lt;ProcedureInfo&gt;(procedures.size() + completed.size());<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    for (java.util.Map.Entry&lt;Long, Procedure&gt; p: procedures.entrySet()) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      procedureLists.add(Procedure.createProcedureInfo(p.getValue(), null));<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    for (java.util.Map.Entry&lt;Long, ProcedureInfo&gt; e: completed.entrySet()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      // Note: The procedure could show up twice in the list with different state, as<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      // it could complete after we walk through procedures list and insert into<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      // procedureList - it is ok, as we will use the information in the ProcedureInfo<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      // to figure it out; to prevent this would increase the complexity of the logic.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      procedureLists.add(e.getValue());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return procedureLists;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * Add a new root-procedure to the executor.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param proc the new procedure to execute.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public long submitProcedure(final Procedure proc) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return submitProcedure(proc, HConstants.NO_NONCE, HConstants.NO_NONCE);<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>  /**<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Add a new root-procedure to the executor.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param proc the new procedure to execute.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param nonceGroup<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @param nonce<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   */<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  public long submitProcedure(<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Procedure proc,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      final long nonceGroup,<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      final long nonce) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    Preconditions.checkArgument(isRunning());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    Preconditions.checkArgument(!proc.hasParent());<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    Long currentProcId;<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span>    // The following part of the code has to be synchronized to prevent multiple request<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    // with the same nonce to execute at the same time.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    synchronized (this) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Check whether the proc exists.  If exist, just return the proc id.<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // This is to prevent the same proc to submit multiple times (it could happen<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // when client could not talk to server and resubmit the same request).<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      NonceKey noncekey = null;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      if (nonce != HConstants.NO_NONCE) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        noncekey = new NonceKey(nonceGroup, nonce);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        currentProcId = nonceKeysToProcIdsMap.get(noncekey);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        if (currentProcId != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // Found the proc<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return currentProcId;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>      // Initialize the Procedure ID<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      currentProcId = nextProcId();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      proc.setProcId(currentProcId);<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // This is new procedure. Set the noncekey and insert into the map.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      if (noncekey != null) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        proc.setNonceKey(noncekey);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        nonceKeysToProcIdsMap.put(noncekey, currentProcId);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    } // end of synchronized (this)<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    // Commit the transaction<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    store.insert(proc, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    if (LOG.isDebugEnabled()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      LOG.debug("Procedure " + proc + " added to the store.");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>    // Create the rollback stack for the procedure<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    RootProcedureState stack = new RootProcedureState();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    rollbackStack.put(currentProcId, stack);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    // Submit the new subprocedures<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    assert !procedures.containsKey(currentProcId);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    procedures.put(currentProcId, proc);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    sendProcedureAddedNotification(currentProcId);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    runnables.addBack(proc);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    return currentProcId;<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>  public ProcedureInfo getResult(final long procId) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return completed.get(procId);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Return true if the procedure is finished.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * The state may be "completed successfully" or "failed and rolledback".<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Use getResult() to check the state or get the result data.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param procId the ID of the procedure to check<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return true if the procedure execution is finished, otherwise false.<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   */<a name="line.694"></a>
-<span class="sourceLineNo">695</span>  public boolean isFinished(final long procId) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return completed.containsKey(procId);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  /**<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * Return true if the procedure is started.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * @param procId the ID of the procedure to check<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * @return true if the procedure execution is started, otherwise false.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>  public boolean isStarted(final long procId) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    Procedure proc = procedures.get(procId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (proc == null) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      return completed.get(procId) != null;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    return proc.wasExecuted();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>  }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>  /**<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * Mark the specified completed procedure, as ready to remove.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param procId the ID of the procedure to remove<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public void removeResult(final long procId) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    ProcedureInfo result = completed.get(procId);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    if (result == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      assert !procedures.containsKey(procId) : "procId=" + procId + " is still running";<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (LOG.isDebugEnabled()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        LOG.debug("Procedure procId=" + procId + " already removed by the cleaner.");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span>    // The CompletedProcedureCleaner will take care of deletion, once the TTL is expired.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    result.setClientAckTime(EnvironmentEdgeManager.currentTime());<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Send an abort notification the specified procedure.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * @param procId the procedure to abort<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   */<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public boolean abort(final long procId) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return abort(procId, true);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Send an abort notification the specified procedure.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param procId the procedure to abort<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    Procedure proc = procedures.get(procId);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (proc != null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return false;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      } else {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        return proc.abort(getEnvironment());<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    return false;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span>  /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Check if the user is this procedure's owner<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * @param procId the target procedure<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param user the user<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @return true if the user is the owner of the procedure,<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   *   false otherwise or the owner is unknown.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public boolean isProcedureOwner(final long procId, final User user) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    if (user == null) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      return false;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    Procedure proc = procedures.get(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    if (proc != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return proc.getOwner().equals(user.getShortName());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    ProcedureInfo procInfo = completed.get(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (procInfo == null) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      // Procedure either does not exist or has already completed and got cleaned up.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // At this time, we cannot check the owner of the procedure<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      return false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    return ProcedureInfo.isProcedureOwner(procInfo, user);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  public Map&lt;Long, ProcedureInfo&gt; getResults() {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    return Collections.unmodifiableMap(completed);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>  public Procedure getProcedure(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    return procedures.get(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  protected ProcedureRunnableSet getRunnableSet() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return runnables;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  /**<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * Execution loop (N threads)<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * while the executor is in a running state,<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * fetch a procedure from the runnables queue and start the execution.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  private void execLoop() {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      Procedure proc = runnables.poll();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      if (proc == null) continue;<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>      try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        activeExecutorCount.incrementAndGet();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        execLoop(proc);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      } finally {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        activeExecutorCount.decrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  private void execLoop(Procedure proc) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (LOG.isTraceEnabled()) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      LOG.trace("Trying to start the execution of " + proc);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>    Long rootProcId = getRootProcedureId(proc);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    if (rootProcId == null) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      // The 'proc' was ready to run but the root procedure was rolledback<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      executeRollback(proc);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    if (procStack == null) return;<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>    do {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      // Try to acquire the execution<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      if (!procStack.acquire(proc)) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        if (procStack.setRollback()) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          // we have the 'rollback-lock' we can start rollingback<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (!executeRollback(rootProcId, procStack)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            procStack.unsetRollback();<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            runnables.yield(proc);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        } else {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          // if we can't rollback means that some child is still running.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // the rollback will be executed after all the children are done.<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // If the procedure was never executed, remove and mark it as rolledback.<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          if (!proc.wasExecuted()) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            if (!executeRollback(proc)) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>              runnables.yield(proc);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        break;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>      // Execute the procedure<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      assert proc.getState() == ProcedureState.RUNNABLE;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      if (proc.acquireLock(getEnvironment())) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        execProcedure(procStack, proc);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        proc.releaseLock(getEnvironment());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      } else {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        runnables.yield(proc);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      procStack.release(proc);<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span>      // allows to kill the executor before something is stored to the wal.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>      // useful to test the procedure recovery.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      if (testing != null &amp;&amp; !isRunning()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        break;<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
-<span class="sourceLineNo">867</span><a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (proc.isSuccess()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        if (LOG.isDebugEnabled()) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          LOG.debug("Procedure completed in " +<a name="line.870"></a>
-<span class="sourceLineNo">871</span>              StringUtils.humanTimeDiff(proc.elapsedTime()) + ": " + proc);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>        }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        // Finalize the procedure state<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        if (proc.getProcId() == rootProcId) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          procedureFinished(proc);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        break;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        runnables.yield(proc);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        break;<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    } while (procStack.isFailed());<a name="line.885"></a>
-<span class="sourceLineNo">886</span>  }<a name="line.886"></a>
+<span class="sourceLineNo">168</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      final Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        final Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        final ProcedureInfo procInfo = entry.getValue();<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>        // TODO: Select TTL based on Procedure type<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        if ((procInfo.hasClientAckTime() &amp;&amp; (now - procInfo.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            (now - procInfo.getLastUpdate()) &gt;= evictTtl) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          if (isDebugEnabled) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>            LOG.debug("Evict completed procedure: " + procInfo);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          store.delete(entry.getKey());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          it.remove();<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>          NonceKey nonceKey = procInfo.getNonceKey();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          if (nonceKey != null) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new UnsupportedOperationException();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    protected void rollback(final TEnvironment env) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throw new UnsupportedOperationException();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    protected boolean abort(final TEnvironment env) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      throw new UnsupportedOperationException();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>    @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public void serializeStateData(final OutputStream stream) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    public void deserializeStateData(final InputStream stream) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      throw new UnsupportedOperationException();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * This map contains every root procedure.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * or periodic procedures.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<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>   * Queue that contains runnable procedures.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private final ProcedureRunnableSet runnables;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  // TODO<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  private final TEnvironment environment;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  private final ProcedureStore store;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private final Configuration conf;<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private Thread[] threads;<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      final ProcedureStore store) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    this.environment = environment;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    this.runnables = runqueue;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    this.store = store;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.conf = conf;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      public void setMaxProcId(long maxProcId) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        lastProcId.set(maxProcId);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>      @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        int corruptedCount = 0;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        while (procIter.hasNext()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          LOG.error("corrupted procedure: " + proc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          corruptedCount++;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    });<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      final boolean abortOnCorruption) throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    // 1. Build the rollback stack<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    int runnablesCount = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    while (procIter.hasNext()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      final NonceKey nonceKey;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      final long procId;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      if (procIter.isNextCompleted()) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        nonceKey = proc.getNonceKey();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        procId = proc.getProcId();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        completed.put(proc.getProcId(), proc);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (isDebugEnabled) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      } else {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        nonceKey = proc.getNonceKey();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        procId = proc.getProcId();<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>        if (!proc.hasParent()) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // add the procedure to the map<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        proc.beforeReplay(getEnvironment());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        procedures.put(proc.getProcId(), proc);<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          runnablesCount++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // add the nonce to the map<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      if (nonceKey != null) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // 2. Initialize the stacks<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    procIter.reset();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    while (procIter.hasNext()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (procIter.isNextCompleted()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        procIter.skipNext();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        continue;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (isDebugEnabled) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                    proc.getState

<TRUNCATED>

[03/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
index e8e86bf..4be7696 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
@@ -25,526 +25,588 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertTrue;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.fail;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.Callable;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.commons.logging.Log;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.commons.logging.LogFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.impl.Log4JLogger;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Put;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Table;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.log4j.Level;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.After;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import com.google.protobuf.RpcController;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import com.google.protobuf.ServiceException;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * accumulated (potentially empty).<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category(MediumTests.class)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestScannerHeartbeatMessages {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private static Table TABLE = null;<a name="line.82"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.Callable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.impl.Log4JLogger;<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.Path;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableName;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Table;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.log4j.Level;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Before;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.BeforeClass;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>import com.google.protobuf.RpcController;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import com.google.protobuf.ServiceException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * accumulated (potentially empty).<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category(MediumTests.class)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>public class TestScannerHeartbeatMessages {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Table configuration<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static int NUM_ROWS = 10;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.91"></a>
+<span class="sourceLineNo">084</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static Table TABLE = null;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Table configuration<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static int NUM_FAMILIES = 3;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.95"></a>
+<span class="sourceLineNo">093</span>  private static int NUM_ROWS = 5;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static int NUM_QUALIFIERS = 3;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.99"></a>
+<span class="sourceLineNo">097</span>  private static int NUM_FAMILIES = 3;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static int VALUE_SIZE = 128;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // message to the client<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // reached<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @BeforeClass<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // Check the timeout condition after every cell<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    TEST_UTIL.startMiniCluster(1);<a name="line.132"></a>
+<span class="sourceLineNo">101</span>  private static int NUM_QUALIFIERS = 3;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static int VALUE_SIZE = 128;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // message to the client<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // reached<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  @BeforeClass<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static void setUpBeforeClass() throws Exception {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.132"></a>
 <span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    ht.put(puts);<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return ht;<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>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param rows<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param families<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param qualifiers<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param value<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      byte[] value) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Put put;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      put = new Put(rows[row]);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          put.add(kv);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      puts.add(put);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return puts;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @AfterClass<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public static void tearDownAfterClass() throws Exception {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Before<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public void setupBeforeTest() throws Exception {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    disableSleeping();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @After<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  public void teardownAfterTest() throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    disableSleeping();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * other due to changing static variables<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 testScannerHeartbeatMessages() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * disabled, the test should throw an exception.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param testCallable<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @throws InterruptedException<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      testCallable.call();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (Exception e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          + ExceptionUtils.getStackTrace(e));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    try {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      testCallable.call();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    } catch (Exception e) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    } finally {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * fetched.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return new Callable&lt;Void&gt;() {<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      public Void call() throws Exception {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // the case where a scan stops on the server side due to a time limit<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        Scan scan = new Scan();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        return null;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    };<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * @throws Exception<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return new Callable&lt;Void&gt;() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Void call() throws Exception {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        // the case where a scan stops on the server side due to a time limit<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        Scan baseScan = new Scan();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // fields may be changed such as start row<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        Scan scanCopy = new Scan(baseScan);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        scanCopy = new Scan(baseScan);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return null;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    };<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * necessary<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * @param scan The scan configuration being tested<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   *          that column family are fetched<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   */<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    disableSleeping();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Result r1 = null;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    Result r2 = null;<a name="line.295"></a>
+<span class="sourceLineNo">134</span>    // Check the timeout condition after every cell<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    TEST_UTIL.startMiniCluster(1);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ht.put(puts);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return ht;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param rows<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param families<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param qualifiers<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param value<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      byte[] value) throws IOException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Put put;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      put = new Put(rows[row]);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          put.add(kv);<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>      puts.add(put);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return puts;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @AfterClass<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static void tearDownAfterClass() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Before<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void setupBeforeTest() throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    disableSleeping();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @After<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void teardownAfterTest() throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    disableSleeping();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * other due to changing static variables<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  @Test<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void testScannerHeartbeatMessages() throws Exception {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    testImportanceOfHeartbeats(testHeartbeatWithSparseFilter());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * disabled, the test should throw an exception.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * @param testCallable<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @throws InterruptedException<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      testCallable.call();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (Exception e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          + ExceptionUtils.getStackTrace(e));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      testCallable.call();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    } catch (Exception e) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } finally {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * fetched.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @throws Exception<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return new Callable&lt;Void&gt;() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      public Void call() throws Exception {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // the case where a scan stops on the server side due to a time limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        Scan scan = new Scan();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return null;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    };<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @throws Exception<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return new Callable&lt;Void&gt;() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      public Void call() throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // the case where a scan stops on the server side due to a time limit<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        Scan baseScan = new Scan();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // fields may be changed such as start row<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        Scan scanCopy = new Scan(baseScan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        scanCopy = new Scan(baseScan);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    };<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static class SparseFilter extends FilterBase{<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        Thread.sleep(SERVER_TIME_LIMIT + 10);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      } catch (InterruptedException e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Thread.currentThread().interrupt();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ?<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          ReturnCode.INCLUDE :<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          ReturnCode.SKIP;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
 <span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    while ((r1 = scanner.next()) != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      r2 = scannerWithHeartbeats.next();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      disableSleeping();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>      assertTrue(r2 != null);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        Result.compareResults(r1, r2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      } catch (Exception e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        fail(e.getMessage());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    scanner.close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    scannerWithHeartbeats.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * is negative then that sleep will be disabled<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param rowSleepTime<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param cfSleepTime<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * Disable the sleeping mechanism server side.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static void disableSleeping() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      super(conf);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf, csm);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return new HeartbeatRPCServices(this);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">297</span>    public static Filter parseFrom(final byte [] pbBytes){<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return new SparseFilter();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Test the case that there is a filter which filters most of cells<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @throws Exception<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Callable&lt;Void&gt; testHeartbeatWithSparseFilter() throws Exception {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return new Callable&lt;Void&gt;() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Void call() throws Exception {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Scan scan = new Scan();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        scan.setFilter(new SparseFilter());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResultScanner scanner = TABLE.getScanner(scan);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        int num = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        while (scanner.next() != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          num++;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertEquals(1, num);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        scanner.close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>        scan = new Scan();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        scan.setFilter(new SparseFilter());<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        scan.setAllowPartialResults(true);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        scanner = TABLE.getScanner(scan);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        num = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        while (scanner.next() != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          num++;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        assertEquals(NUM_FAMILIES * NUM_QUALIFIERS, num);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        scanner.close();<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    };<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * necessary<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @param scan The scan configuration being tested<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   *          that column family are fetched<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws Exception<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    disableSleeping();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    Result r1 = null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    Result r2 = null;<a name="line.357"></a>
 <span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private static boolean heartbeatsEnabled = true;<a name="line.363"></a>
+<span class="sourceLineNo">359</span>    while ((r1 = scanner.next()) != null) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      r2 = scannerWithHeartbeats.next();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      disableSleeping();<a name="line.363"></a>
 <span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public HeartbeatRPCServices(HRegionServer rs) throws IOException {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      super(rs);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public ScanResponse scan(RpcController controller, ScanRequest request) <a name="line.370"></a>
-<span class="sourceLineNo">371</span>        throws ServiceException {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      ScanRequest.Builder builder = ScanRequest.newBuilder(request);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      builder.setClientHandlesHeartbeats(heartbeatsEnabled);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      return super.scan(controller, builder.build());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">365</span>      assertTrue(r2 != null);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        Result.compareResults(r1, r2);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      } catch (Exception e) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        fail(e.getMessage());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    scanner.close();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    scannerWithHeartbeats.close();<a name="line.375"></a>
 <span class="sourceLineNo">376</span>  }<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
 <span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Custom HRegion class that instantiates {@link RegionScanner}s with configurable sleep times<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * between fetches of row Results and/or column family cells. Useful for emulating an instance<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * where the server is taking a long time to process a client's scan request<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static class HeartbeatHRegion extends HRegion {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Row sleeps occur AFTER each row worth of cells is retrieved.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private static int rowSleepTime = DEFAULT_ROW_SLEEP_TIME;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private static boolean sleepBetweenRows = false;<a name="line.386"></a>
+<span class="sourceLineNo">379</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * is negative then that sleep will be disabled<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @param rowSleepTime<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @param cfSleepTime<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // The sleep for column families can be initiated before or after we fetch the cells for the<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    // column family. If the sleep occurs BEFORE then the time limits will be reached inside<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // StoreScanner while we are fetching individual cells. If the sleep occurs AFTER then the time<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // limit will be reached inside RegionScanner after all the cells for a column family have been<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // retrieved.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    private static boolean sleepBeforeColumnFamily = false;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    private static int columnFamilySleepTime = DEFAULT_CF_SLEEP_TIME;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    private static boolean sleepBetweenColumnFamilies = false;<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public HeartbeatHRegion(Path tableDir, WAL wal, FileSystem fs, Configuration confParam,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        HRegionInfo regionInfo, HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    public HeartbeatHRegion(HRegionFileSystem fs, WAL wal, Configuration confParam,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      super(fs, wal, confParam, htd, rsServices);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    private static void columnFamilySleep() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (HeartbeatHRegion.sleepBetweenColumnFamilies) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        try {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          Thread.sleep(HeartbeatHRegion.columnFamilySleepTime);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        } catch (InterruptedException e) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    private static void rowSleep() {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (HeartbeatHRegion.sleepBetweenRows) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          Thread.sleep(HeartbeatHRegion.rowSleepTime);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      } catch (InterruptedException e) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // Instantiate the custom heartbeat region scanners<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        List&lt;KeyValueScanner&gt; additionalScanners, boolean copyCells) throws IOException {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      if (scan.isReversed()) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (scan.getFilter() != null) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          scan.getFilter().setReversed(true);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        return new HeartbeatReversedRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return new HeartbeatRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Custom ReversedRegionScanner that can be configured to sleep between retrievals of row Results<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * and/or column family cells<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private static class HeartbeatReversedRegionScanner extends ReversedRegionScannerImpl {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    HeartbeatReversedRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        HRegion region, boolean copyCells) throws IOException {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      super(scan, additionalScanners, region, copyCells);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      HeartbeatHRegion.rowSleep();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      return moreRows;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.storeHeap = new HeartbeatReversedKVHeap(scanners, region.getCellCompartor());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!joinedScanners.isEmpty()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.joinedHeap = new HeartbeatReversedKVHeap(joinedScanners, region.getCellCompartor());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  /**<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * Custom RegionScanner that can be configured to sleep between retrievals of row Results and/or<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * column family cells<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  private static class HeartbeatRegionScanner extends RegionScannerImpl {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    HeartbeatRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        boolean copyCells) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      region.super(scan, additionalScanners, region, copyCells);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      HeartbeatHRegion.rowSleep();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return moreRows;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>    @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      this.storeHeap = new HeartbeatKVHeap(scanners, region.getCellCompartor());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (!joinedScanners.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.joinedHeap = new HeartbeatKVHeap(joinedScanners, region.getCellCompartor());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  /**<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * Custom KV Heap that can be configured to sleep/wait in between retrievals of column family<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * cells. Useful for testing<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private static final class HeartbeatKVHeap extends KeyValueHeap {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    public HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, CellComparator comparator)<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      super(scanners, comparator);<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>    HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, KVScannerComparator comparator)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        throws IOException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      super(scanners, comparator);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    @Override<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext context)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      boolean moreRows = super.next(result, context);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      if (!HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.515"></a>
+<span class="sourceLineNo">388</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * Disable the sleeping mechanism server side.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private static void disableSleeping() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super(conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      super(conf, csm);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return new HeartbeatRPCServices(this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.424"></a>
+<span class="

<TRUNCATED>

[11/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
index 79aa3db..3cbc9f0 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
@@ -27,264 +27,368 @@
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileSystem;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.After;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.junit.Before;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.Test;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.experimental.categories.Category;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import static org.junit.Assert.assertEquals;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import static org.junit.Assert.assertTrue;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>@Category({MasterTests.class, SmallTests.class})<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TestYieldProcedures {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Procedure NULL_PROC = null;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private ProcedureStore procStore;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private HBaseCommonTestingUtility htu;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private FileSystem fs;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private Path testDir;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private Path logDir;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @Before<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public void setUp() throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    htu = new HBaseCommonTestingUtility();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    testDir = htu.getDataTestDir();<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    logDir = new Path(testDir, "proc-logs");<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(), procStore);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @After<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public void tearDown() throws IOException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    procExecutor.stop();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    procStore.stop(false);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    fs.delete(logDir, 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>  @Test<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    final int NUM_STATES = 3;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      procExecutor.submitProcedure(procs[i]);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // verify yield during execute()<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    long prevTimestamp = 0;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(execStep);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        assertEquals(false, info.isRollback());<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        prevTimestamp++;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      }<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>    // verify yield during rollback()<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    int count = NUM_STATES;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(count);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        assertEquals(true, info.isRollback());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        prevTimestamp++;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      count++;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final int NUM_STATES = 3;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.126"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Before;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertEquals;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import static org.junit.Assert.assertTrue;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, SmallTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestYieldProcedures {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Procedure NULL_PROC = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TestRunQueue procRunnables;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private ProcedureStore procStore;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private HBaseCommonTestingUtility htu;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileSystem fs;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Path testDir;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Path logDir;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Before<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setUp() throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htu = new HBaseCommonTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    testDir = htu.getDataTestDir();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    logDir = new Path(testDir, "proc-logs");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    procRunnables = new TestRunQueue();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        procStore, procRunnables);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @After<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void tearDown() throws IOException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    procExecutor.stop();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    procStore.stop(false);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fs.delete(logDir, true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    final int NUM_STATES = 3;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      procExecutor.submitProcedure(procs[i]);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // verify execution<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int index = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(false, info.isRollback());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      // verify rollback<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertEquals(true, info.isRollback());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // check runnable queue stats<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, procRunnables.size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertEquals(18, procRunnables.addBackCalls);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(15, procRunnables.yieldCalls);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertEquals(19, procRunnables.pollCalls);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(3, procRunnables.completionCalls);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final int NUM_STATES = 3;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    int count = 0;<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      assertEquals(false, info.isRollback());<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      assertEquals(i, info.getStep().ordinal());<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>      info = proc.getExecutionInfo().get(count++);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      assertEquals(false, info.isRollback());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      assertEquals(i, info.getStep().ordinal());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(true, info.isRollback());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      assertEquals(i, info.getStep().ordinal());<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>      info = proc.getExecutionInfo().get(count++);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      assertEquals(true, info.isRollback());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      assertEquals(i, info.getStep().ordinal());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private static class TestProcEnv {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public long nextTimestamp() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return timestamp.incrementAndGet();<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><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static class TestStateMachineProcedure<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    public class ExecutionInfo {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      private final boolean rollback;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      private final long timestamp;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      private final State step;<a name="line.167"></a>
+<span class="sourceLineNo">128</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertEquals(false, info.isRollback());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      assertEquals(i, info.getStep().ordinal());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      info = proc.getExecutionInfo().get(count++);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      assertEquals(false, info.isRollback());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      assertEquals(i, info.getStep().ordinal());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(true, info.isRollback());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      assertEquals(i, info.getStep().ordinal());<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>      info = proc.getExecutionInfo().get(count++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertEquals(true, info.isRollback());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(i, info.getStep().ordinal());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // check runnable queue stats<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertEquals(0, procRunnables.size());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(12, procRunnables.addBackCalls);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertEquals(11, procRunnables.yieldCalls);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertEquals(13, procRunnables.pollCalls);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public void testYieldException() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    TestYieldProcedure proc = new TestYieldProcedure();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertEquals(6, proc.step);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        this.timestamp = timestamp;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        this.step = step;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        this.rollback = isRollback;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>      public State getStep() { return step; }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      public long getTimestamp() { return timestamp; }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      public boolean isRollback() { return rollback; }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    private final boolean abortOnFinalStep;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    public TestStateMachineProcedure() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      this(false, false);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">169</span>    // check runnable queue stats<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(0, procRunnables.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(6, procRunnables.addBackCalls);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(5, procRunnables.yieldCalls);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    assertEquals(7, procRunnables.pollCalls);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static class TestProcEnv {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    public long nextTimestamp() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return timestamp.incrementAndGet();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public static class TestStateMachineProcedure<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public class ExecutionInfo {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      private final boolean rollback;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      private final long timestamp;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      private final State step;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return executionInfo;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        throws InterruptedException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      LOG.info("execute step " + state);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, false));<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      Thread.sleep(150);<a name="line.204"></a>
+<span class="sourceLineNo">195</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        this.timestamp = timestamp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        this.step = step;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.rollback = isRollback;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      public State getStep() { return step; }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      public long getTimestamp() { return timestamp; }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public boolean isRollback() { return rollback; }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
 <span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.debug("THROW INTERRUPT");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new InterruptedException("test interrupt");<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">206</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    private final boolean abortOnFinalStep;<a name="line.209"></a>
 <span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>      switch (state) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        case STATE_1:<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          setNextState(State.STATE_2);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        case STATE_2:<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          setNextState(State.STATE_3);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        case STATE_3:<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          if (abortOnFinalStep) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          return Flow.NO_MORE_STATE;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        default:<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          throw new UnsupportedOperationException();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      return Flow.HAS_MORE_STATE;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        throws InterruptedException {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      LOG.debug("rollback state " + state);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, true));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Thread.sleep(150);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        LOG.debug("THROW INTERRUPT");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throw new InterruptedException("test interrupt");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      switch (state) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        case STATE_1:<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        case STATE_2:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          break;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case STATE_3:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        default:<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          throw new UnsupportedOperationException();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected State getState(final int stateId) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return State.values()[stateId];<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    protected int getStateId(final State state) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      return state.ordinal();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    protected State getInitialState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return State.STATE_1;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return true;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    protected boolean abort(TestProcEnv env) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      aborted.set(true);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>}<a name="line.279"></a>
+<span class="sourceLineNo">211</span>    public TestStateMachineProcedure() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      this(false, false);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return executionInfo;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        throws InterruptedException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final long ts = env.nextTimestamp();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info(getProcId() + " execute step " + state + " ts=" + ts);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      executionInfo.add(new ExecutionInfo(ts, state, false));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Thread.sleep(150);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.debug("THROW INTERRUPT");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        throw new InterruptedException("test interrupt");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      switch (state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        case STATE_1:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          setNextState(State.STATE_2);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          break;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        case STATE_2:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          setNextState(State.STATE_3);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          break;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        case STATE_3:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          if (abortOnFinalStep) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          return Flow.NO_MORE_STATE;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        default:<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          throw new UnsupportedOperationException();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return Flow.HAS_MORE_STATE;<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>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throws InterruptedException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      final long ts = env.nextTimestamp();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      LOG.debug(getProcId() + " rollback state " + state + " ts=" + ts);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      executionInfo.add(new ExecutionInfo(ts, state, true));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Thread.sleep(150);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("THROW INTERRUPT");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        throw new InterruptedException("test interrupt");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      switch (state) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        case STATE_1:<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          break;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        case STATE_2:<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          break;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        case STATE_3:<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          break;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        default:<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          throw new UnsupportedOperationException();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    protected State getState(final int stateId) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return State.values()[stateId];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    protected int getStateId(final State state) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return state.ordinal();<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>    @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    protected State getInitialState() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return State.STATE_1;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return true;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    protected boolean abort(TestProcEnv env) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      aborted.set(true);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static class TestYieldProcedure extends Procedure&lt;TestProcEnv&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private int step = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public TestYieldProcedure() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>    @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    protected Procedure[] execute(final TestProcEnv env) throws ProcedureYieldException {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.info("execute step " + step);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (step++ &lt; 5) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        throw new ProcedureYieldException();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return null;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected void rollback(TestProcEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected boolean abort(TestProcEnv env) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    protected boolean isYieldAfterExecutionStep(final TestProcEnv env) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return true;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    protected void serializeStateData(final OutputStream stream) throws IOException {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    @Override<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    protected void deserializeStateData(final InputStream stream) throws IOException {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private static class TestRunQueue extends ProcedureSimpleRunQueue {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    private int completionCalls;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    private int addFrontCalls;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    private int addBackCalls;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private int yieldCalls;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private int pollCalls;<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public TestRunQueue() {}<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public void addFront(final Procedure proc) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        addFrontCalls++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        super.addFront(proc);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      public void addBack(final Procedure proc) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        addBackCalls++;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        super.addBack(proc);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>      @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      public void yield(final Procedure proc) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        yieldCalls++;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        super.yield(proc);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      public Procedure poll() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        pollCalls++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return super.poll();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      public void completionCleanup(Procedure proc) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        completionCalls++;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>}<a name="line.383"></a>
 
 
 


[41/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index a2c6864..c5c7f80 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -618,24 +618,24 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionOpeningState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">StoreScanner.StoreScannerCompactionRace</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreScanner.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreScanner.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteCompare</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreScanner.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreScanner.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DefaultHeapMemoryTuner.StepDirection</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 00d2201..546973c 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -101,8 +101,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 86e9213..9b4d86d 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -140,9 +140,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">AccessController.OpType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 6aea795..9869b17 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -152,8 +152,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">SaslStatus</span></a></li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 998537b..109408f 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -379,58 +379,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.110">m_master</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.122">m_serverManager</a></pre>
+<h4>m_frags</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.122">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_frags__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_serverManager__IsNotDefault</a></pre>
+<h4>m_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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.139">m_format</a></pre>
+<h4>m_assignmentManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_format__IsNotDefault</a></pre>
+<h4>m_assignmentManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_servers</a></pre>
+<h4>m_serverManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_serverManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_servers__IsNotDefault</a></pre>
+<h4>m_serverManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_filter">
@@ -469,76 +469,76 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_frags</a></pre>
+<h4>m_catalogJanitorEnabled</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_catalogJanitorEnabled__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_frags__IsNotDefault</a></pre>
+<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.224">m_assignmentManager</a></pre>
+<h4>m_deadServers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.224">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_deadServers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_deadServers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_deadServers</a></pre>
+<h4>m_servers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_deadServers__IsNotDefault</a></pre>
+<h4>m_servers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.258">m_catalogJanitorEnabled</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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.258">m_format</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_catalogJanitorEnabled__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -584,85 +584,85 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.106">getMaster</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
+<h4>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
 </li>
 </ul>
-<a name="getServerManager()">
+<a name="getFrags()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.118">getServerManager</a>()</pre>
+<h4>getFrags</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.118">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault()">
+<a name="getFrags__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getServerManager__IsNotDefault</a>()</pre>
+<h4>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getAssignmentManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getFormat</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getAssignmentManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getFormat__IsNotDefault</a>()</pre>
+<h4>getAssignmentManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
 </li>
 </ul>
-<a name="getServers()">
+<a name="getServerManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getServers</a>()</pre>
+<h4>getServerManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault()">
+<a name="getServerManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getServers__IsNotDefault</a>()</pre>
+<h4>getServerManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setFilter(java.lang.String)">
@@ -719,112 +719,112 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="getFrags()">
+<a name="getCatalogJanitorEnabled()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getFrags</a>()</pre>
+<h4>getCatalogJanitorEnabled</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault()">
+<a name="getCatalogJanitorEnabled__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getFrags__IsNotDefault</a>()</pre>
+<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
 </li>
 </ul>
-<a name="getAssignmentManager()">
+<a name="getDeadServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.220">getAssignmentManager</a>()</pre>
+<h4>getDeadServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.220">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault()">
+<a name="getDeadServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getDeadServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 </li>
 </ul>
-<a name="getDeadServers()">
+<a name="getServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getDeadServers</a>()</pre>
+<h4>getServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault()">
+<a name="getServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getDeadServers__IsNotDefault</a>()</pre>
+<h4>getServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getCatalogJanitorEnabled</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 4a8c9e9..532b7bb 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -323,31 +323,31 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="serverManager">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.275">serverManager</a></pre>
+<h4>frags</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.275">frags</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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.282">format</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.282">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">servers</a></pre>
+<h4>serverManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">serverManager</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -368,40 +368,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.303">metaLocation</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">frags</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.317">assignmentManager</a></pre>
+<h4>deadServers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.317">deadServers</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">deadServers</a></pre>
+<h4>servers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">servers</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.331">catalogJanitorEnabled</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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.331">format</a></pre>
 </li>
 </ul>
 </li>
@@ -473,31 +473,31 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
+<h4>setFrags</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
+<h4>setServerManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
 </li>
 </ul>
 <a name="setFilter(java.lang.String)">
@@ -518,40 +518,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
+<h4>setServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 76b9ccd..a3c06be 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -264,31 +264,31 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.62">master</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.63">serverManager</a></pre>
+<h4>frags</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.63">frags</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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.64">format</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">servers</a></pre>
+<h4>serverManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">serverManager</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -309,40 +309,40 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">metaLocation</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">frags</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">assignmentManager</a></pre>
+<h4>deadServers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">deadServers</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">deadServers</a></pre>
+<h4>servers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">servers</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">catalogJanitorEnabled</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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.71">format</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
index a1d2c88..7f6727a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -2081,7 +2081,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.h
 <div class="block">This repair method requires the cluster to be online since it contacts
  region servers and the masters.  It makes each region's state in HDFS, in
  hbase:meta, and deployments consistent.</div>
-<dl><dt><span class="strong">Returns:</span></dt><dd>If > 0 , number of errors detected, if &lt; 0 there was an unrecoverable
+<dl><dt><span class="strong">Returns:</span></dt><dd>If &gt; 0 , number of errors detected, if &lt; 0 there was an unrecoverable
      error.  If 0, we have a clean hbase.</dd>
 <dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -2764,7 +2764,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.h
  kept in the AssignementManager.  Because disable uses this state instead of
  that found in META, we can't seem to cleanly disable/delete tables that
  have been hbck fixed.  When used on a version of HBase that does not have
- the offline ipc call exposed on the master (<0.90.5, <0.92.0) a master
+ the offline ipc call exposed on the master (&lt;0.90.5, &lt;0.92.0) a master
  restart or failover may be required.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 76e94e6..7b558b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -471,13 +471,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/FanOutOneBlockAsyncDFSOutput.State.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">FanOutOneBlockAsyncDFSOutput.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
index 72817ea..16e5e6c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
@@ -211,7 +211,7 @@
 <span class="sourceLineNo">203</span><a name="line.203"></a>
 <span class="sourceLineNo">204</span>  @InterfaceAudience.Private<a name="line.204"></a>
 <span class="sourceLineNo">205</span>  public boolean hasClientAckTime() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    return clientAckTime &gt; 0;<a name="line.206"></a>
+<span class="sourceLineNo">206</span>    return clientAckTime != -1;<a name="line.206"></a>
 <span class="sourceLineNo">207</span>  }<a name="line.207"></a>
 <span class="sourceLineNo">208</span><a name="line.208"></a>
 <span class="sourceLineNo">209</span>  @InterfaceAudience.Private<a name="line.209"></a>


[26/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name=

<TRUNCATED>

[42/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
index 22bb24a..f50784d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -2971,7 +2971,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7389">FIXED_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7392">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="DEEP_OVERHEAD">
@@ -2980,7 +2980,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>DEEP_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7406">DEEP_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7409">DEEP_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="MOCKED_LIST">
@@ -2989,7 +2989,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MOCKED_LIST</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7797">MOCKED_LIST</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7800">MOCKED_LIST</a></pre>
 <div class="block">A mocked list implementation - discards all updates.</div>
 </li>
 </ul>
@@ -5437,7 +5437,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5431">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5434">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -5450,7 +5450,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5437">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5440">hashCode</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -5463,7 +5463,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5442">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5445">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -5476,7 +5476,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>newHRegion</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6128">newHRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6131">newHRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                  <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                  org.apache.hadoop.fs.FileSystem&nbsp;fs,
                  org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -5502,7 +5502,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6158">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6161">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                     org.apache.hadoop.fs.Path&nbsp;rootDir,
                     org.apache.hadoop.conf.Configuration&nbsp;conf,
                     <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor,
@@ -5522,7 +5522,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6173">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6176">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                     org.apache.hadoop.fs.Path&nbsp;rootDir,
                     org.apache.hadoop.conf.Configuration&nbsp;conf,
                     <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;hTableDescriptor,
@@ -5538,7 +5538,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6193">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6196">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                   <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd,
                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                   org.apache.hadoop.conf.Configuration&nbsp;conf)
@@ -5559,7 +5559,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6215">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6218">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                   <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd,
                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                   org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -5582,7 +5582,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6236">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6239">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                   <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd,
                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
@@ -5604,7 +5604,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6257">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6260">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                   <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd,
                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
@@ -5628,7 +5628,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6286">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6289">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                   org.apache.hadoop.fs.FileSystem&nbsp;fs,
                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
@@ -5651,7 +5651,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6308">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6311">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                   org.apache.hadoop.fs.FileSystem&nbsp;fs,
                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
@@ -5676,7 +5676,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6332">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6335">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                   org.apache.hadoop.fs.FileSystem&nbsp;fs,
                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                   org.apache.hadoop.fs.Path&nbsp;tableDir,
@@ -5702,7 +5702,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationScope</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6346">getReplicationScope</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6349">getReplicationScope</a>()</pre>
 </li>
 </ul>
 <a name="openHRegion(org.apache.hadoop.hbase.regionserver.HRegion, org.apache.hadoop.hbase.util.CancelableProgressable)">
@@ -5711,7 +5711,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6357">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;other,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6360">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;other,
                   <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Useful when reopening a closed region (normally for unit tests)</div>
@@ -5727,7 +5727,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6365">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;other,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6368">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;other,
                  <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -5740,7 +5740,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6376">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6379">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Open HRegion.
  Calls initialize and sets sequenceId.</div>
@@ -5755,7 +5755,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>warmupHRegion</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6397">warmupHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6400">warmupHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                  <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd,
                  <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                  org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -5772,7 +5772,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompressionCodecs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6426">checkCompressionCodecs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6429">checkCompressionCodecs</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -5784,7 +5784,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkEncryption</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6433">checkEncryption</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6436">checkEncryption</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -5796,7 +5796,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkClassLoading</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6439">checkClassLoading</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6442">checkClassLoading</a>()
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -5808,7 +5808,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createDaughterRegionFromSplits</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6449">createDaughterRegionFromSplits</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6452">createDaughterRegionFromSplits</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a daughter region from given a temp directory with the region data.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>hri</code> - Spec. for daughter region to open.</dd>
@@ -5822,7 +5822,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createMergedRegionFromMerges</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6468">createMergedRegionFromMerges</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;mergedRegionInfo,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6471">createMergedRegionFromMerges</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;mergedRegionInfo,
                                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region_b)
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a merged region given a temp directory with the region data.</div>
@@ -5838,7 +5838,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionToMETA</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6495">addRegionToMETA</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;meta,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6498">addRegionToMETA</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;meta,
                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Inserts a new region's meta information into the passed
@@ -5856,7 +5856,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <li class="blockList">
 <h4>getRegionDir</h4>
 <pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6520">getRegionDir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
+public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6523">getRegionDir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>For tests only; to be removed.</i></div>
 <div class="block">Computes the Path of the HRegion</div>
@@ -5871,7 +5871,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <li class="blockList">
 <h4>getRegionDir</h4>
 <pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6534">getRegionDir</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
+public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6537">getRegionDir</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
                                                 <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>For tests only; to be removed.</i></div>
 <div class="block">Computes the Path of the HRegion</div>
@@ -5885,7 +5885,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>rowIsInRange</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6547">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6550">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                    byte[]&nbsp;row)</pre>
 <div class="block">Determines if the specified row is within the row range specified by the
  specified HRegionInfo</div>
@@ -5899,7 +5899,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>rowIsInRange</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6554">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6557">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;info,
                    byte[]&nbsp;row,
                    int&nbsp;offset,
                    short&nbsp;length)</pre>
@@ -5911,7 +5911,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeAdjacent</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6569">mergeAdjacent</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;srcA,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6572">mergeAdjacent</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;srcA,
                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;srcB)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Merge two HRegions.  The regions must be adjacent and must not overlap.</div>
@@ -5926,7 +5926,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>merge</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6603">merge</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;a,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6606">merge</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;a,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;b)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Merge two regions whether they are adjacent or not.</div>
@@ -5942,7 +5942,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6670">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6673">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get(org.apache.hadoop.hbase.client.Get)">Region</a></code></strong></div>
 <div class="block">Do a get based on the get parameter.</div>
@@ -5961,7 +5961,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareGet</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6677">prepareGet</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6680">prepareGet</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -5975,7 +5975,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6692">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6695">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
              boolean&nbsp;withCoprocessor)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get(org.apache.hadoop.hbase.client.Get,%20boolean)">Region</a></code></strong></div>
@@ -5996,7 +5996,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsUpdateForGet</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6724">metricsUpdateForGet</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6727">metricsUpdateForGet</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results)</pre>
 </li>
 </ul>
 <a name="mutateRow(org.apache.hadoop.hbase.client.RowMutations)">
@@ -6005,7 +6005,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6737">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;rm)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6740">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;rm)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#mutateRow(org.apache.hadoop.hbase.client.RowMutations)">Region</a></code></strong></div>
 <div class="block">Performs multiple mutations atomically on a single row. Currently
@@ -6024,7 +6024,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6746">mutateRowsWithLocks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6749">mutateRowsWithLocks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;rowsToLock)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Perform atomic mutations within the region w/o nonces.
@@ -6039,7 +6039,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6764">mutateRowsWithLocks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6767">mutateRowsWithLocks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;rowsToLock,
                        long&nbsp;nonceGroup,
                        long&nbsp;nonce)
@@ -6063,7 +6063,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadStatistics</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6773">getLoadStatistics</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6776">getLoadStatistics</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>statistics about the current load of the region</dd></dl>
 </li>
 </ul>
@@ -6073,7 +6073,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6787">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6790">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#processRowsWithLocks(org.apache.hadoop.hbase.regionserver.RowProcessor)">Region</a></code></strong></div>
 <div class="block">Performs atomic multiple reads and writes on a given row.</div>
@@ -6091,7 +6091,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6793">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6796">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6111,7 +6111,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6799">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6802">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                         long&nbsp;timeout,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -6133,7 +6133,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>preProcess</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6918">preProcess</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6921">preProcess</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
               <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -6146,7 +6146,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doProcessRowWithTimeout</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6928">doProcessRowWithTimeout</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6931">doProcessRowWithTimeout</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                            long&nbsp;now,
                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
@@ -6163,7 +6163,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6978">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6981">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -6175,7 +6175,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6983">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;mutation,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6986">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;mutation,
             long&nbsp;nonceGroup,
             long&nbsp;nonce)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6195,7 +6195,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6987">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6990">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -6207,7 +6207,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6992">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;mutation,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6995">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;mutation,
                long&nbsp;nonceGroup,
                long&nbsp;nonce)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6227,7 +6227,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doDelta</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7007">doDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7010">doDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
              <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
              long&nbsp;nonceGroup,
              long&nbsp;nonce,
@@ -6251,7 +6251,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doWALAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7080">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7083">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
                                                     <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability,
                                                     long&nbsp;nonceGroup,
                                                     long&nbsp;nonce)
@@ -6266,7 +6266,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doWALAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7090">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7093">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
                                                     <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability,
                                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds,
                                                     long&nbsp;now,
@@ -6284,7 +6284,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doCoprocessorPreCall</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7118">doCoprocessorPreCall</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7121">doCoprocessorPreCall</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                           <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do coprocessor pre-increment or pre-append call.</div>
@@ -6300,7 +6300,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonDeltas</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7145">reckonDeltas</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7148">reckonDeltas</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                    <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                    <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;effectiveDurability,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;forMemStore,
@@ -6322,7 +6322,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonDeltasByStore</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7188">reckonDeltasByStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7191">reckonDeltasByStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                              <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                              <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;effectiveDurability,
@@ -6349,7 +6349,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonIncrement</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7254">reckonIncrement</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7257">reckonIncrement</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
                    long&nbsp;deltaAmount,
                    <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentValue,
                    byte[]&nbsp;columnFamily,
@@ -6369,7 +6369,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7279">reckonAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7282">reckonAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
                 <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentValue,
                 long&nbsp;now,
                 <a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;mutation)
@@ -6384,7 +6384,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getLongValue</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7330">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7333">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                           throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Get the long out of the passed in Cell</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -6397,7 +6397,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7346">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7349">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
              <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
              <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;coordinates,
              <a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;isolation,
@@ -6416,7 +6416,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>sort</h4>
-<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7371">sort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7374">sort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
               <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;comparator)</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Sorted list of <code>cells</code> using <code>comparator</code></dd></dl>
 </li>
@@ -6427,7 +6427,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFamily</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7380">checkFamily</a>(byte[]&nbsp;family)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7383">checkFamily</a>(byte[]&nbsp;family)
            throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></code></dd></dl>
@@ -6439,7 +6439,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7421">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7424">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -6453,7 +6453,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7431">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7434">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#registerService(com.google.protobuf.Service)">Region</a></code></strong></div>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to
  be available for handling
@@ -6480,7 +6480,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>execService</h4>
-<pre>public&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7453">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7456">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
                                       org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;call)
                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#execService(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall)">Region</a></code></strong></div>
@@ -6505,7 +6505,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldForceSplit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7503">shouldForceSplit</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7506">shouldForceSplit</a>()</pre>
 </li>
 </ul>
 <a name="getExplicitSplitPoint()">
@@ -6514,7 +6514,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getExplicitSplitPoint</h4>
-<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7507">getExplicitSplitPoint</a>()</pre>
+<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7510">getExplicitSplitPoint</a>()</pre>
 </li>
 </ul>
 <a name="forceSplit(byte[])">
@@ -6523,7 +6523,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>forceSplit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7511">forceSplit</a>(byte[]&nbsp;sp)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7514">forceSplit</a>(byte[]&nbsp;sp)</pre>
 </li>
 </ul>
 <a name="clearSplit()">
@@ -6532,7 +6532,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>clearSplit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7520">clearSplit</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7523">clearSplit</a>()</pre>
 </li>
 </ul>
 <a name="prepareToSplit()">
@@ -6541,7 +6541,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareToSplit</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7528">prepareToSplit</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7531">prepareToSplit</a>()</pre>
 <div class="block">Give the region a chance to prepare before it is split.</div>
 </li>
 </ul>
@@ -6551,7 +6551,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSplit</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7538">checkSplit</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7541">checkSplit</a>()</pre>
 <div class="block">Return the splitpoint. null indicates the region isn't splittable
  If the splitpoint isn't explicitly specified, it will go over the stores
  to find the best splitpoint. Currently the criteria of best splitpoint
@@ -6564,7 +6564,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7574">getCompactPriority</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7577">getCompactPriority</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The priority that this region should have in the compaction queue</dd></dl>
 </li>
 </ul>
@@ -6574,7 +6574,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7585">getCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7588">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCoprocessorHost()">getCoprocessorHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -6587,7 +6587,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessorHost</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7590">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7593">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>coprocessorHost</code> - the new coprocessor host</dd></dl>
 </li>
 </ul>
@@ -6597,7 +6597,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7595">startRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7598">startRegionOperation</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation()">Region</a></code></strong></div>
 <div class="block">This method needs to be called before any public call that reads or
@@ -6618,7 +6618,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7602">startRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7605">startRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation(org.apache.hadoop.hbase.regionserver.Region.Operation)">Region</a></code></strong></div>
 <div class="block">This method needs to be called before any public call that reads or
@@ -6640,7 +6640,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7650">closeRegionOperat

<TRUNCATED>

[32/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name=

<TRUNCATED>

[25/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5699"></a

<TRUNCATED>

[07/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
index 79aa3db..3cbc9f0 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html
@@ -27,264 +27,368 @@
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileSystem;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.After;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.junit.Before;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.Test;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.experimental.categories.Category;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import static org.junit.Assert.assertEquals;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import static org.junit.Assert.assertTrue;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>@Category({MasterTests.class, SmallTests.class})<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TestYieldProcedures {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Procedure NULL_PROC = null;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private ProcedureStore procStore;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private HBaseCommonTestingUtility htu;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private FileSystem fs;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private Path testDir;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private Path logDir;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @Before<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public void setUp() throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    htu = new HBaseCommonTestingUtility();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    testDir = htu.getDataTestDir();<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    logDir = new Path(testDir, "proc-logs");<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(), procStore);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @After<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public void tearDown() throws IOException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    procExecutor.stop();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    procStore.stop(false);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    fs.delete(logDir, 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>  @Test<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    final int NUM_STATES = 3;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      procExecutor.submitProcedure(procs[i]);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // verify yield during execute()<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    long prevTimestamp = 0;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(execStep);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        assertEquals(false, info.isRollback());<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        prevTimestamp++;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      }<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>    // verify yield during rollback()<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    int count = NUM_STATES;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(count);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        assertEquals(true, info.isRollback());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        prevTimestamp++;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      count++;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final int NUM_STATES = 3;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.126"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Before;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertEquals;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import static org.junit.Assert.assertTrue;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, SmallTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestYieldProcedures {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Procedure NULL_PROC = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TestRunQueue procRunnables;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private ProcedureStore procStore;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private HBaseCommonTestingUtility htu;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileSystem fs;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Path testDir;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Path logDir;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Before<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setUp() throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htu = new HBaseCommonTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    testDir = htu.getDataTestDir();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    logDir = new Path(testDir, "proc-logs");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    procRunnables = new TestRunQueue();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        procStore, procRunnables);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @After<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void tearDown() throws IOException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    procExecutor.stop();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    procStore.stop(false);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fs.delete(logDir, true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    final int NUM_STATES = 3;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      procExecutor.submitProcedure(procs[i]);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // verify execution<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int index = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(false, info.isRollback());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      // verify rollback<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertEquals(true, info.isRollback());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // check runnable queue stats<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, procRunnables.size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertEquals(18, procRunnables.addBackCalls);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(15, procRunnables.yieldCalls);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertEquals(19, procRunnables.pollCalls);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(3, procRunnables.completionCalls);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final int NUM_STATES = 3;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    int count = 0;<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      assertEquals(false, info.isRollback());<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      assertEquals(i, info.getStep().ordinal());<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>      info = proc.getExecutionInfo().get(count++);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      assertEquals(false, info.isRollback());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      assertEquals(i, info.getStep().ordinal());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(true, info.isRollback());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      assertEquals(i, info.getStep().ordinal());<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>      info = proc.getExecutionInfo().get(count++);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      assertEquals(true, info.isRollback());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      assertEquals(i, info.getStep().ordinal());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private static class TestProcEnv {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public long nextTimestamp() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return timestamp.incrementAndGet();<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><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static class TestStateMachineProcedure<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    public class ExecutionInfo {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      private final boolean rollback;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      private final long timestamp;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      private final State step;<a name="line.167"></a>
+<span class="sourceLineNo">128</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertEquals(false, info.isRollback());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      assertEquals(i, info.getStep().ordinal());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      info = proc.getExecutionInfo().get(count++);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      assertEquals(false, info.isRollback());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      assertEquals(i, info.getStep().ordinal());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(true, info.isRollback());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      assertEquals(i, info.getStep().ordinal());<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>      info = proc.getExecutionInfo().get(count++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertEquals(true, info.isRollback());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(i, info.getStep().ordinal());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // check runnable queue stats<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertEquals(0, procRunnables.size());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(12, procRunnables.addBackCalls);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertEquals(11, procRunnables.yieldCalls);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertEquals(13, procRunnables.pollCalls);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public void testYieldException() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    TestYieldProcedure proc = new TestYieldProcedure();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertEquals(6, proc.step);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        this.timestamp = timestamp;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        this.step = step;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        this.rollback = isRollback;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>      public State getStep() { return step; }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      public long getTimestamp() { return timestamp; }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      public boolean isRollback() { return rollback; }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    private final boolean abortOnFinalStep;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    public TestStateMachineProcedure() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      this(false, false);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">169</span>    // check runnable queue stats<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(0, procRunnables.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(6, procRunnables.addBackCalls);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(5, procRunnables.yieldCalls);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    assertEquals(7, procRunnables.pollCalls);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static class TestProcEnv {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    public long nextTimestamp() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return timestamp.incrementAndGet();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public static class TestStateMachineProcedure<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public class ExecutionInfo {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      private final boolean rollback;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      private final long timestamp;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      private final State step;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return executionInfo;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        throws InterruptedException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      LOG.info("execute step " + state);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, false));<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      Thread.sleep(150);<a name="line.204"></a>
+<span class="sourceLineNo">195</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        this.timestamp = timestamp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        this.step = step;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.rollback = isRollback;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      public State getStep() { return step; }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      public long getTimestamp() { return timestamp; }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public boolean isRollback() { return rollback; }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
 <span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.debug("THROW INTERRUPT");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new InterruptedException("test interrupt");<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">206</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    private final boolean abortOnFinalStep;<a name="line.209"></a>
 <span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>      switch (state) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        case STATE_1:<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          setNextState(State.STATE_2);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        case STATE_2:<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          setNextState(State.STATE_3);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        case STATE_3:<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          if (abortOnFinalStep) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          return Flow.NO_MORE_STATE;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        default:<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          throw new UnsupportedOperationException();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      return Flow.HAS_MORE_STATE;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        throws InterruptedException {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      LOG.debug("rollback state " + state);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, true));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Thread.sleep(150);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        LOG.debug("THROW INTERRUPT");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throw new InterruptedException("test interrupt");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      switch (state) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        case STATE_1:<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        case STATE_2:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          break;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case STATE_3:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        default:<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          throw new UnsupportedOperationException();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected State getState(final int stateId) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return State.values()[stateId];<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    protected int getStateId(final State state) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      return state.ordinal();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    protected State getInitialState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return State.STATE_1;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return true;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    protected boolean abort(TestProcEnv env) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      aborted.set(true);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>}<a name="line.279"></a>
+<span class="sourceLineNo">211</span>    public TestStateMachineProcedure() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      this(false, false);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return executionInfo;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        throws InterruptedException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final long ts = env.nextTimestamp();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info(getProcId() + " execute step " + state + " ts=" + ts);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      executionInfo.add(new ExecutionInfo(ts, state, false));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Thread.sleep(150);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.debug("THROW INTERRUPT");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        throw new InterruptedException("test interrupt");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      switch (state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        case STATE_1:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          setNextState(State.STATE_2);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          break;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        case STATE_2:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          setNextState(State.STATE_3);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          break;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        case STATE_3:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          if (abortOnFinalStep) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          return Flow.NO_MORE_STATE;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        default:<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          throw new UnsupportedOperationException();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return Flow.HAS_MORE_STATE;<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>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throws InterruptedException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      final long ts = env.nextTimestamp();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      LOG.debug(getProcId() + " rollback state " + state + " ts=" + ts);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      executionInfo.add(new ExecutionInfo(ts, state, true));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Thread.sleep(150);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("THROW INTERRUPT");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        throw new InterruptedException("test interrupt");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      switch (state) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        case STATE_1:<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          break;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        case STATE_2:<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          break;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        case STATE_3:<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          break;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        default:<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          throw new UnsupportedOperationException();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    protected State getState(final int stateId) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return State.values()[stateId];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    protected int getStateId(final State state) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return state.ordinal();<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>    @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    protected State getInitialState() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return State.STATE_1;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return true;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    protected boolean abort(TestProcEnv env) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      aborted.set(true);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static class TestYieldProcedure extends Procedure&lt;TestProcEnv&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private int step = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public TestYieldProcedure() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>    @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    protected Procedure[] execute(final TestProcEnv env) throws ProcedureYieldException {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.info("execute step " + step);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (step++ &lt; 5) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        throw new ProcedureYieldException();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return null;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected void rollback(TestProcEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected boolean abort(TestProcEnv env) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    protected boolean isYieldAfterExecutionStep(final TestProcEnv env) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return true;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    protected void serializeStateData(final OutputStream stream) throws IOException {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    @Override<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    protected void deserializeStateData(final InputStream stream) throws IOException {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private static class TestRunQueue extends ProcedureSimpleRunQueue {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    private int completionCalls;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    private int addFrontCalls;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    private int addBackCalls;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private int yieldCalls;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private int pollCalls;<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public TestRunQueue() {}<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public void addFront(final Procedure proc) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        addFrontCalls++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        super.addFront(proc);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      public void addBack(final Procedure proc) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        addBackCalls++;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        super.addBack(proc);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>      @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      public void yield(final Procedure proc) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        yieldCalls++;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        super.yield(proc);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      public Procedure poll() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        pollCalls++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return super.poll();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      public void completionCleanup(Procedure proc) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        completionCalls++;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>}<a name="line.383"></a>
 
 
 


[47/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
index 16754ea..9946af3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
@@ -408,7 +408,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
index 30507e0..9dc7aff 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.html
@@ -402,7 +402,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.html
index 9865c56..6bcfb20 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.html
@@ -375,7 +375,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.html
index 8105b3e..137eb88 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.html
@@ -355,7 +355,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.html
index 1728294..f0cefc8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.html
@@ -401,7 +401,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
index 97ef12f..2d81e7f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
@@ -416,48 +416,55 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#size(java.util.Collection)">size</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&nbsp;hris)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#splitLogs(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">splitLogs</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#start(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">start</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Start processing of crashed server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#throwProcedureYieldException(java.lang.String)">throwProcedureYieldException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</code>
 <div class="block">Extend the toString() information with the procedure details
  e.g.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#verifyAndAssignMeta(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">verifyAndAssignMeta</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">If hbase:meta is not assigned already, assign.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#verifyAndAssignMetaWithRetries(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">verifyAndAssignMetaWithRetries</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">If hbase:meta is not assigned already, assign.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#waitOnAssign(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20java.util.List)">waitOnAssign</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&nbsp;hris)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#waitOnRegionToClearRegionsInTransition(org.apache.hadoop.hbase.master.AssignmentManager,%20org.apache.hadoop.hbase.HRegionInfo,%20int)">waitOnRegionToClearRegionsInTransition</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;am,
                                                                             <a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
@@ -1148,7 +1155,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
 <a name="isYieldBeforeExecuteFromState(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv, org.apache.hadoop.hbase.protobuf.generated.MasterProcedureProtos.ServerCrashState)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>isYieldBeforeExecuteFromState</h4>
 <pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.767">isYieldBeforeExecuteFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
@@ -1166,6 +1173,26 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
          Defaults to return false.</dd></dl>
 </li>
 </ul>
+<a name="shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shouldWaitClientAck</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.772">shouldWaitClientAck</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">Procedure</a></code></strong></div>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired. The client can cut down the waiting time
+ by requesting that the result is removed from the executor.
+ In case of system started procedure, we can force the executor to auto-ack.</div>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
+<dt><span class="strong">Returns:</span></dt><dd>true if the executor should wait the client ack for the result.
+         Defaults to return true.</dd></dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>


[29/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BE

<TRUNCATED>

[34/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 10be916..701ae83 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
@@ -173,1145 +173,1147 @@
 <span class="sourceLineNo">165</span>      final long evictTtl = conf.getInt(EVICT_TTL_CONF_KEY, DEFAULT_EVICT_TTL);<a name="line.165"></a>
 <span class="sourceLineNo">166</span>      final long evictAckTtl = conf.getInt(EVICT_ACKED_TTL_CONF_KEY, DEFAULT_ACKED_EVICT_TTL);<a name="line.166"></a>
 <span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        ProcedureInfo result = entry.getValue();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>        // TODO: Select TTL based on Procedure type<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        if ((result.hasClientAckTime() &amp;&amp; (now - result.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.175"></a>
-<span class="sourceLineNo">176</span>            (now - result.getLastUpdate()) &gt;= evictTtl) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          if (LOG.isDebugEnabled()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>            LOG.debug("Evict completed procedure " + entry.getKey());<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          store.delete(entry.getKey());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          it.remove();<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>          NonceKey nonceKey = result.getNonceKey();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          if (nonceKey != null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            nonceKeysToProcIdsMap.remove(nonceKey);<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>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>    @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      throw new UnsupportedOperationException();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    protected void rollback(final TEnvironment env) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throw new UnsupportedOperationException();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected boolean abort(final TEnvironment env) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      throw new UnsupportedOperationException();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    public void serializeStateData(final OutputStream stream) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public void deserializeStateData(final InputStream stream) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      throw new UnsupportedOperationException();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * This map contains every root procedure.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * or periodic procedures.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Queue that contains runnable procedures.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  private final ProcedureRunnableSet runnables;<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>  // TODO<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private final TEnvironment environment;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private final ProcedureStore store;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private final Configuration conf;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private Thread[] threads;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final ProcedureStore store) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    this.environment = environment;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    this.runnables = runqueue;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    this.store = store;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.conf = conf;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      public void setMaxProcId(long maxProcId) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        lastProcId.set(maxProcId);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>      @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        int corruptedCount = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        while (procIter.hasNext()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          LOG.error("corrupted procedure: " + proc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          corruptedCount++;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    });<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      final boolean abortOnCorruption) throws IOException {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // 1. Build the rollback stack<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    int runnablesCount = 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    while (procIter.hasNext()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      final NonceKey nonceKey;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      final long procId;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>      if (procIter.isNextCompleted()) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        nonceKey = proc.getNonceKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        procId = proc.getProcId();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        completed.put(proc.getProcId(), proc);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        if (isDebugEnabled) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } else {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        nonceKey = proc.getNonceKey();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        procId = proc.getProcId();<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>        if (!proc.hasParent()) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>        // add the procedure to the map<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        proc.beforeReplay(getEnvironment());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        procedures.put(proc.getProcId(), proc);<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          runnablesCount++;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>      // add the nonce to the map<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      if (nonceKey != null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // 2. Initialize the stacks<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    procIter.reset();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    while (procIter.hasNext()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      if (procIter.isNextCompleted()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        procIter.skipNext();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        continue;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (isDebugEnabled) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                    proc.getState(), proc.hasException(), proc));<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>      Long rootProcId = getRootProcedureId(proc);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (rootProcId == null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        runnables.addBack(proc);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (proc.hasParent() &amp;&amp; !proc.isFinished()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        Procedure parent = procedures.get(proc.getParentProcId());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        // corrupted procedures are handled later at step 3<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        if (parent != null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          parent.incChildrenLatch();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>      RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      procStack.loadStack(proc);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      switch (proc.getState()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        case RUNNABLE:<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          runnableList.add(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          break;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        case WAITING_TIMEOUT:<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          if (waitingSet == null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>            waitingSet = new HashSet&lt;Procedure&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          waitingSet.add(proc);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        case FINISHED:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (proc.hasException()) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // add the proc to the runnables to perform the rollback<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            runnables.addBack(proc);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            break;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        case ROLLEDBACK:<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        case INITIALIZING:<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          LOG.error(msg);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          throw new UnsupportedOperationException(msg);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        default:<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          break;<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><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    // 3. Validate the stacks<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    int corruptedCount = 0;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    while (itStack.hasNext()) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      RootProcedureState procStack = entry.getValue();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if (procStack.isValid()) continue;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>      for (Procedure proc: procStack.getSubprocedures()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        LOG.error("corrupted procedure: " + proc);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        procedures.remove(proc.getProcId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        runnableList.remove(proc);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        corruptedCount++;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      itStack.remove();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // 4. Push the runnables<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (!runnableList.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // some procedure may be started way before this stuff.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Procedure proc = runnableList.get(i);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        if (!proc.hasParent()) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        if (proc.wasExecuted()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          runnables.addFront(proc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        } else {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          // if it was not in execution, it can wait.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          runnables.addBack(proc);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * Start the procedure executor.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   *<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param numThreads number of threads available for procedure execution.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   */<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (running.getAndSet(true)) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      LOG.warn("Already running");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    // procedures and triggering periodic procedures.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    threads = new Thread[numThreads + 1];<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    LOG.info("Starting procedure executor threads=" + threads.length);<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    // Initialize procedures executor<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; numThreads; ++i) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      threads[i] = new Thread("ProcedureExecutor-" + i) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        public void run() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          execLoop();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      };<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Initialize procedures timeout handler (this is the +1 thread)<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    threads[numThreads] = new Thread("ProcedureExecutorTimeoutThread") {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      public void run() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        timeoutLoop();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    };<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // Acquire the store lease.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    store.recoverLease();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    load(abortOnCorruption);<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      threads[i].start();<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>    // Add completed cleaner<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    waitingTimeout.add(<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>  public void stop() {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (!running.getAndSet(false)) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    LOG.info("Stopping the procedure executor");<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    runnables.signalAll();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    waitingTimeout.signalAll();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  public void join() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    boolean interrupted = false;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        threads[i].join();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } catch (InterruptedException ex) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        interrupted = true;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    if (interrupted) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      Thread.currentThread().interrupt();<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    completed.clear();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    rollbackStack.clear();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    procedures.clear();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    nonceKeysToProcIdsMap.clear();<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    waitingTimeout.clear();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    runnables.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    lastProcId.set(-1);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  public boolean isRunning() {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    return running.get();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @return the number of execution threads.<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   */<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  public int getNumThreads() {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    return threads == null ? 0 : (threads.length - 1);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  public int getActiveExecutorCount() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return activeExecutorCount.get();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  public TEnvironment getEnvironment() {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    return this.environment;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public ProcedureStore getStore() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return this.store;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public void registerListener(ProcedureExecutorListener listener) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.listeners.add(listener);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>  public boolean unregisterListener(ProcedureExecutorListener listener) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return this.listeners.remove(listener);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * List procedures.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @return the procedures in a list<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  public List&lt;ProcedureInfo&gt; listProcedures() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    List&lt;ProcedureInfo&gt; procedureLists =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        new ArrayList&lt;ProcedureInfo&gt;(procedures.size() + completed.size());<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    for (java.util.Map.Entry&lt;Long, Procedure&gt; p: procedures.entrySet()) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      procedureLists.add(Procedure.createProcedureInfo(p.getValue(), null));<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    for (java.util.Map.Entry&lt;Long, ProcedureInfo&gt; e: completed.entrySet()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      // Note: The procedure could show up twice in the list with different state, as<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      // it could complete after we walk through procedures list and insert into<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      // procedureList - it is ok, as we will use the information in the ProcedureInfo<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      // to figure it out; to prevent this would increase the complexity of the logic.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      procedureLists.add(e.getValue());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return procedureLists;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * Add a new root-procedure to the executor.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param proc the new procedure to execute.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public long submitProcedure(final Procedure proc) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return submitProcedure(proc, HConstants.NO_NONCE, HConstants.NO_NONCE);<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>  /**<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Add a new root-procedure to the executor.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param proc the new procedure to execute.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param nonceGroup<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @param nonce<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   */<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  public long submitProcedure(<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Procedure proc,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      final long nonceGroup,<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      final long nonce) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    Preconditions.checkArgument(isRunning());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    Preconditions.checkArgument(!proc.hasParent());<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    Long currentProcId;<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span>    // The following part of the code has to be synchronized to prevent multiple request<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    // with the same nonce to execute at the same time.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    synchronized (this) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Check whether the proc exists.  If exist, just return the proc id.<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // This is to prevent the same proc to submit multiple times (it could happen<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // when client could not talk to server and resubmit the same request).<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      NonceKey noncekey = null;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      if (nonce != HConstants.NO_NONCE) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        noncekey = new NonceKey(nonceGroup, nonce);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        currentProcId = nonceKeysToProcIdsMap.get(noncekey);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        if (currentProcId != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // Found the proc<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return currentProcId;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>      // Initialize the Procedure ID<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      currentProcId = nextProcId();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      proc.setProcId(currentProcId);<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // This is new procedure. Set the noncekey and insert into the map.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      if (noncekey != null) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        proc.setNonceKey(noncekey);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        nonceKeysToProcIdsMap.put(noncekey, currentProcId);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    } // end of synchronized (this)<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    // Commit the transaction<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    store.insert(proc, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    if (LOG.isDebugEnabled()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      LOG.debug("Procedure " + proc + " added to the store.");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>    // Create the rollback stack for the procedure<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    RootProcedureState stack = new RootProcedureState();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    rollbackStack.put(currentProcId, stack);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    // Submit the new subprocedures<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    assert !procedures.containsKey(currentProcId);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    procedures.put(currentProcId, proc);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    sendProcedureAddedNotification(currentProcId);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    runnables.addBack(proc);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    return currentProcId;<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>  public ProcedureInfo getResult(final long procId) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return completed.get(procId);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Return true if the procedure is finished.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * The state may be "completed successfully" or "failed and rolledback".<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Use getResult() to check the state or get the result data.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param procId the ID of the procedure to check<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return true if the procedure execution is finished, otherwise false.<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   */<a name="line.694"></a>
-<span class="sourceLineNo">695</span>  public boolean isFinished(final long procId) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return completed.containsKey(procId);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  /**<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * Return true if the procedure is started.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * @param procId the ID of the procedure to check<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * @return true if the procedure execution is started, otherwise false.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>  public boolean isStarted(final long procId) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    Procedure proc = procedures.get(procId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (proc == null) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      return completed.get(procId) != null;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    return proc.wasExecuted();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>  }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>  /**<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * Mark the specified completed procedure, as ready to remove.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param procId the ID of the procedure to remove<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public void removeResult(final long procId) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    ProcedureInfo result = completed.get(procId);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    if (result == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      assert !procedures.containsKey(procId) : "procId=" + procId + " is still running";<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (LOG.isDebugEnabled()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        LOG.debug("Procedure procId=" + procId + " already removed by the cleaner.");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span>    // The CompletedProcedureCleaner will take care of deletion, once the TTL is expired.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    result.setClientAckTime(EnvironmentEdgeManager.currentTime());<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Send an abort notification the specified procedure.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * @param procId the procedure to abort<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   */<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public boolean abort(final long procId) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return abort(procId, true);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Send an abort notification the specified procedure.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param procId the procedure to abort<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    Procedure proc = procedures.get(procId);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (proc != null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return false;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      } else {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        return proc.abort(getEnvironment());<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    return false;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span>  /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Check if the user is this procedure's owner<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * @param procId the target procedure<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param user the user<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @return true if the user is the owner of the procedure,<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   *   false otherwise or the owner is unknown.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public boolean isProcedureOwner(final long procId, final User user) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    if (user == null) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      return false;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    Procedure proc = procedures.get(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    if (proc != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return proc.getOwner().equals(user.getShortName());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    ProcedureInfo procInfo = completed.get(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (procInfo == null) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      // Procedure either does not exist or has already completed and got cleaned up.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // At this time, we cannot check the owner of the procedure<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      return false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    return ProcedureInfo.isProcedureOwner(procInfo, user);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  public Map&lt;Long, ProcedureInfo&gt; getResults() {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    return Collections.unmodifiableMap(completed);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>  public Procedure getProcedure(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    return procedures.get(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  protected ProcedureRunnableSet getRunnableSet() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return runnables;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  /**<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * Execution loop (N threads)<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * while the executor is in a running state,<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * fetch a procedure from the runnables queue and start the execution.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  private void execLoop() {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      Procedure proc = runnables.poll();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      if (proc == null) continue;<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>      try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        activeExecutorCount.incrementAndGet();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        execLoop(proc);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      } finally {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        activeExecutorCount.decrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  private void execLoop(Procedure proc) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (LOG.isTraceEnabled()) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      LOG.trace("Trying to start the execution of " + proc);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>    Long rootProcId = getRootProcedureId(proc);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    if (rootProcId == null) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      // The 'proc' was ready to run but the root procedure was rolledback<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      executeRollback(proc);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    if (procStack == null) return;<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>    do {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      // Try to acquire the execution<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      if (!procStack.acquire(proc)) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        if (procStack.setRollback()) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          // we have the 'rollback-lock' we can start rollingback<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (!executeRollback(rootProcId, procStack)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            procStack.unsetRollback();<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            runnables.yield(proc);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        } else {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          // if we can't rollback means that some child is still running.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // the rollback will be executed after all the children are done.<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // If the procedure was never executed, remove and mark it as rolledback.<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          if (!proc.wasExecuted()) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            if (!executeRollback(proc)) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>              runnables.yield(proc);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        break;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>      // Execute the procedure<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      assert proc.getState() == ProcedureState.RUNNABLE;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      if (proc.acquireLock(getEnvironment())) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        execProcedure(procStack, proc);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        proc.releaseLock(getEnvironment());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      } else {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        runnables.yield(proc);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      procStack.release(proc);<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span>      // allows to kill the executor before something is stored to the wal.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>      // useful to test the procedure recovery.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      if (testing != null &amp;&amp; !isRunning()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        break;<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
-<span class="sourceLineNo">867</span><a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (proc.isSuccess()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        if (LOG.isDebugEnabled()) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          LOG.debug("Procedure completed in " +<a name="line.870"></a>
-<span class="sourceLineNo">871</span>              StringUtils.humanTimeDiff(proc.elapsedTime()) + ": " + proc);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>        }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        // Finalize the procedure state<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        if (proc.getProcId() == rootProcId) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          procedureFinished(proc);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        break;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        runnables.yield(proc);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        break;<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    } while (procStack.isFailed());<a name="line.885"></a>
-<span class="sourceLineNo">886</span>  }<a name="line.886"></a>
+<span class="sourceLineNo">168</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      final Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        final Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        final ProcedureInfo procInfo = entry.getValue();<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>        // TODO: Select TTL based on Procedure type<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        if ((procInfo.hasClientAckTime() &amp;&amp; (now - procInfo.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            (now - procInfo.getLastUpdate()) &gt;= evictTtl) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          if (isDebugEnabled) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>            LOG.debug("Evict completed procedure: " + procInfo);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          store.delete(entry.getKey());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          it.remove();<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>          NonceKey nonceKey = procInfo.getNonceKey();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          if (nonceKey != null) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new UnsupportedOperationException();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    protected void rollback(final TEnvironment env) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throw new UnsupportedOperationException();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    protected boolean abort(final TEnvironment env) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      throw new UnsupportedOperationException();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>    @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public void serializeStateData(final OutputStream stream) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    public void deserializeStateData(final InputStream stream) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      throw new UnsupportedOperationException();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * This map contains every root procedure.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * or periodic procedures.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<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>   * Queue that contains runnable procedures.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private final ProcedureRunnableSet runnables;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  // TODO<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  private final TEnvironment environment;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  private final ProcedureStore store;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private final Configuration conf;<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private Thread[] threads;<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      final ProcedureStore store) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    this.environment = environment;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    this.runnables = runqueue;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    this.store = store;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.conf = conf;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      public void setMaxProcId(long maxProcId) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        lastProcId.set(maxProcId);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>      @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        int corruptedCount = 0;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        while (procIter.hasNext()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          LOG.error("corrupted procedure: " + proc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          corruptedCount++;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    });<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      final boolean abortOnCorruption) throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    // 1. Build the rollback stack<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    int runnablesCount = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    while (procIter.hasNext()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      final NonceKey nonceKey;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      final long procId;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      if (procIter.isNextCompleted()) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        nonceKey = proc.getNonceKey();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        procId = proc.getProcId();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        completed.put(proc.getProcId(), proc);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (isDebugEnabled) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      } else {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        nonceKey = proc.getNonceKey();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        procId = proc.getProcId();<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>        if (!proc.hasParent()) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // add the procedure to the map<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        proc.beforeReplay(getEnvironment());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        procedures.put(proc.getProcId(), proc);<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          runnablesCount++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // add the nonce to the map<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      if (nonceKey != null) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // 2. Initialize the stacks<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    procIter.reset();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    while (procIter.hasNext()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (procIter.isNextCompleted()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        procIter.skipNext();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        continue;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (isDebugEnabled) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                    proc.getState(), proc.hasException(), proc));<a name="line.381"></a>
+<span class="sourceLineNo">382</s

<TRUNCATED>

[17/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 11bc6c7..3a00b94 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
@@ -215,7 +215,7 @@ implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</pre
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 9d55863..20ff316 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
@@ -186,7 +186,7 @@ extends org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="http://docs.ora
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestFaultyRollback.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestFaultyRollback.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestFaultyRollback.html
index a0f2059..1fc7acf 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestFaultyRollback.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestFaultyRollback.html
@@ -194,7 +194,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestSequentialProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestSequentialProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestSequentialProcedure.html
index 8337ba6..7d62178 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestSequentialProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestSequentialProcedure.html
@@ -216,7 +216,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.TestWaitChild.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.TestWaitChild.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.TestWaitChild.html
index 8227674..1d6de5f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.TestWaitChild.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.TestWaitChild.html
@@ -202,7 +202,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.html
index 39566b9..71e3930 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureExecution.TestWaitingProcedure.html
@@ -226,7 +226,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.BaseTestStepProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.BaseTestStepProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.BaseTestStepProcedure.html
index d8fc25f..d621878 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.BaseTestStepProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.BaseTestStepProcedure.html
@@ -206,7 +206,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="../..
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step1Procedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step1Procedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step1Procedure.html
index d1b21fe..e76cd11 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step1Procedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step1Procedure.html
@@ -179,7 +179,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedure
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step2Procedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step2Procedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step2Procedure.html
index 035ae3d..bc34e3e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step2Procedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.Step2Procedure.html
@@ -168,7 +168,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedure
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.html
index 6f14071..8409bca 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestMultiStepProcedure.html
@@ -202,7 +202,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedure
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestSingleStepProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestSingleStepProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestSingleStepProcedure.html
index 59d8444..f381085 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestSingleStepProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestSingleStepProcedure.html
@@ -194,7 +194,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="../..
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.html
index 34f85b8..99abb1e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.html
@@ -253,7 +253,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestProcedure.html
index 4d4f8a9..b28750e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestProcedure.html
@@ -198,7 +198,7 @@ extends org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, execute, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, execute, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestSingleStepProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestSingleStepProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestSingleStepProcedure.html
index 024cb0f..c2d0400 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestSingleStepProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestSingleStepProcedure.html
@@ -186,7 +186,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedure
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestTwoStepProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestTwoStepProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestTwoStepProcedure.html
index 4eab52d..fff683c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestTwoStepProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.TestTwoStepProcedure.html
@@ -186,7 +186,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedure
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html
index 41842a6..2052550 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.BasicProcedure.html
@@ -176,7 +176,7 @@ extends org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="../../../../../
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.DoublingStateStringBasicProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.DoublingStateStringBasicProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.DoublingStateStringBasicProcedure.html
index 968ed86..98c1487 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.DoublingStateStringBasicProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.DoublingStateStringBasicProcedure.html
@@ -169,7 +169,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedure
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.SimpleStateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.SimpleStateMachineProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.SimpleStateMachineProcedure.html
index f622c28..6b35ab3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.SimpleStateMachineProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureToString.SimpleStateMachineProcedure.html
@@ -205,7 +205,7 @@ extends org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;<a href="../
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
+<code><clinit>, acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, doExecute, doRollback, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
index fd5302b..7e05800 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" target="_top">Frames</a></li>
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.152">TestYieldProcedures.TestProcEnv</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.178">TestYieldProcedures.TestProcEnv</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -189,7 +189,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>timestamp</h4>
-<pre>public final&nbsp;<a href="http://docs.oracle.com/javase/7/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/TestYieldProcedures.TestProcEnv.html#line.153">timestamp</a></pre>
+<pre>public final&nbsp;<a href="http://docs.oracle.com/javase/7/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/TestYieldProcedures.TestProcEnv.html#line.179">timestamp</a></pre>
 </li>
 </ul>
 </li>
@@ -206,7 +206,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestYieldProcedures.TestProcEnv</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html#line.152">TestYieldProcedures.TestProcEnv</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html#line.178">TestYieldProcedures.TestProcEnv</a>()</pre>
 </li>
 </ul>
 </li>
@@ -223,7 +223,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nextTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html#line.155">nextTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html#line.181">nextTimestamp</a>()</pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html
new file mode 100644
index 0000000..274a5d2
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html
@@ -0,0 +1,446 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestYieldProcedures.TestRunQueue (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="TestYieldProcedures.TestRunQueue (Apache HBase 2.0.0-SNAPSHOT Test API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestYieldProcedures.TestRunQueue.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" target="_top">Frames</a></li>
+<li><a href="TestYieldProcedures.TestRunQueue.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2</div>
+<h2 title="Class TestYieldProcedures.TestRunQueue" class="title">Class TestYieldProcedures.TestRunQueue</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestRunQueue</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.html#line.346">TestYieldProcedures.TestRunQueue</a>
+extends org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addBackCalls">addBackCalls</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addFrontCalls">addFrontCalls</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#completionCalls">completionCalls</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#pollCalls">pollCalls</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#yieldCalls">yieldCalls</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#TestYieldProcedures.TestRunQueue()">TestYieldProcedures.TestRunQueue</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addBack(org.apache.hadoop.hbase.procedure2.Procedure)">addBack</a></strong>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#addFront(org.apache.hadoop.hbase.procedure2.Procedure)">addFront</a></strong>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#completionCleanup(org.apache.hadoop.hbase.procedure2.Procedure)">completionCleanup</a></strong>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.procedure2.Procedure</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#poll()">poll</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#yield(org.apache.hadoop.hbase.procedure2.Procedure)">yield</a></strong>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</h3>
+<code>clear, signalAll, size</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="completionCalls">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>completionCalls</h4>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.347">completionCalls</a></pre>
+</li>
+</ul>
+<a name="addFrontCalls">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addFrontCalls</h4>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.348">addFrontCalls</a></pre>
+</li>
+</ul>
+<a name="addBackCalls">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addBackCalls</h4>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.349">addBackCalls</a></pre>
+</li>
+</ul>
+<a name="yieldCalls">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yieldCalls</h4>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.350">yieldCalls</a></pre>
+</li>
+</ul>
+<a name="pollCalls">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>pollCalls</h4>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.351">pollCalls</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestYieldProcedures.TestRunQueue()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestYieldProcedures.TestRunQueue</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.353">TestYieldProcedures.TestRunQueue</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="addFront(org.apache.hadoop.hbase.procedure2.Procedure)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addFront</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.355">addFront</a>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>addFront</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet</code></dd>
+<dt><strong>Overrides:</strong></dt>
+<dd><code>addFront</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</code></dd>
+</dl>
+</li>
+</ul>
+<a name="addBack(org.apache.hadoop.hbase.procedure2.Procedure)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addBack</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.361">addBack</a>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>addBack</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet</code></dd>
+<dt><strong>Overrides:</strong></dt>
+<dd><code>addBack</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</code></dd>
+</dl>
+</li>
+</ul>
+<a name="yield(org.apache.hadoop.hbase.procedure2.Procedure)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>yield</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.367">yield</a>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>yield</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet</code></dd>
+<dt><strong>Overrides:</strong></dt>
+<dd><code>yield</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</code></dd>
+</dl>
+</li>
+</ul>
+<a name="poll()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>poll</h4>
+<pre>public&nbsp;org.apache.hadoop.hbase.procedure2.Procedure&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.373">poll</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>poll</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet</code></dd>
+<dt><strong>Overrides:</strong></dt>
+<dd><code>poll</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</code></dd>
+</dl>
+</li>
+</ul>
+<a name="completionCleanup(org.apache.hadoop.hbase.procedure2.Procedure)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>completionCleanup</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html#line.379">completionCleanup</a>(org.apache.hadoop.hbase.procedure2.Procedure&nbsp;proc)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>completionCleanup</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet</code></dd>
+<dt><strong>Overrides:</strong></dt>
+<dd><code>completionCleanup</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestYieldProcedures.TestRunQueue.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" target="_top">Frames</a></li>
+<li><a href="TestYieldProcedures.TestRunQueue.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
index a8ad6c5..6ea3df3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.164">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#line.190">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -205,7 +205,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rollback</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.165">rollback</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.191">rollback</a></pre>
 </li>
 </ul>
 <a name="timestamp">
@@ -214,7 +214,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>timestamp</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.166">timestamp</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.192">timestamp</a></pre>
 </li>
 </ul>
 <a name="step">
@@ -223,7 +223,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>step</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.167">step</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.193">step</a></pre>
 </li>
 </ul>
 </li>
@@ -240,7 +240,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.169">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>(long&nbsp;timestamp,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.195">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>(long&nbsp;timestamp,
                                                            <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;step,
                                                            boolean&nbsp;isRollback)</pre>
 </li>
@@ -259,7 +259,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getStep</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.175">getStep</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.201">getStep</a>()</pre>
 </li>
 </ul>
 <a name="getTimestamp()">
@@ -268,7 +268,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.176">getTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.202">getTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="isRollback()">
@@ -277,7 +277,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isRollback</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.177">isRollback</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#line.203">isRollback</a>()</pre>
 </li>
 </ul>
 </li>


[22/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 d749868..af99488 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
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.64"></a>
 <span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,57 +116,57 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 28, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setServerManager(ServerManager serverManager)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 28, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_serverManager = serverManager;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_serverManager__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerManager getServerManager()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_serverManager;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerManager m_serverManager;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getServerManager__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_serverManager__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_serverManager__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 29, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 29, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_assignmentManager = assignmentManager;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_assignmentManager__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public AssignmentManager getAssignmentManager()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_assignmentManager;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private AssignmentManager m_assignmentManager;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_assignmentManager__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 23, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 28, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setServerManager(ServerManager serverManager)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 23, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_servers = servers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_servers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 28, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_serverManager = serverManager;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_serverManager__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public List&lt;ServerName&gt; getServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerManager getServerManager()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_servers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_serverManager;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private List&lt;ServerName&gt; m_servers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerManager m_serverManager;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getServerManager__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_servers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_serverManager__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_servers__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    private boolean m_serverManager__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    // 26, 1<a name="line.162"></a>
 <span class="sourceLineNo">163</span>    public void setFilter(String filter)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
@@ -201,74 +201,74 @@
 <span class="sourceLineNo">193</span>      return m_metaLocation__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
 <span class="sourceLineNo">195</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 21, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.197"></a>
+<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 21, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_frags = frags;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_frags__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_frags;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getFrags__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_frags__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_frags__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 29, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 24, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 29, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_assignmentManager = assignmentManager;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_assignmentManager__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 24, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_deadServers = deadServers;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_deadServers__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public AssignmentManager getAssignmentManager()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_assignmentManager;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_deadServers;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private AssignmentManager m_assignmentManager;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getDeadServers__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_assignmentManager__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_deadServers__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_deadServers__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 27, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setFormat(String format)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 27, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_format = format;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_format__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public String getFormat()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_format;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private String m_format;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getFormat__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_format__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_format__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,24 +280,24 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected ServerManager serverManager;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected AssignmentManager assignmentManager;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected List&lt;ServerName&gt; servers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerManager serverManager;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setServers(p_servers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
@@ -315,31 +315,31 @@
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected boolean catalogJanitorEnabled;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setFrags(p_frags);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected AssignmentManager assignmentManager;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected String format;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setFormat(p_format);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

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


[39/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
index 6b5a8a4..30f2748 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html
@@ -202,177 +202,186 @@
 <span class="sourceLineNo">194</span>    sb.append(")");<a name="line.194"></a>
 <span class="sourceLineNo">195</span>  }<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  @Override<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  protected boolean acquireLock(final MasterProcedureEnv env) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (!env.getMasterServices().isInitialized()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      // Namespace manager might not be ready if master is not fully initialized,<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // return false to reject user namespace creation; return true for default<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // and system namespace creation (this is part of master initialization).<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      boolean isBootstrapNs = nsDescriptor.equals(NamespaceDescriptor.DEFAULT_NAMESPACE) ||<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        nsDescriptor.equals(NamespaceDescriptor.SYSTEM_NAMESPACE);<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (!isBootstrapNs &amp;&amp; env.waitInitialized(this)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        return false;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return env.getProcedureQueue().tryAcquireNamespaceExclusiveLock(this, getNamespaceName());<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  @Override<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  protected void releaseLock(final MasterProcedureEnv env) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    env.getProcedureQueue().releaseNamespaceExclusiveLock(this, getNamespaceName());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  @Override<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  public TableName getTableName() {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    return TableName.NAMESPACE_TABLE_NAME;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public TableOperationType getTableOperationType() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return TableOperationType.EDIT;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>  private String getNamespaceName() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    return nsDescriptor.getName();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * Action before any real action of creating namespace.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @param env MasterProcedureEnv<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @throws IOException<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  private void prepareCreate(final MasterProcedureEnv env) throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (getTableNamespaceManager(env).doesNamespaceExist(nsDescriptor.getName())) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      throw new NamespaceExistException(nsDescriptor.getName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    getTableNamespaceManager(env).validateTableAndRegionCount(nsDescriptor);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Create the namespace directory<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * @param env MasterProcedureEnv<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @throws IOException<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  protected static void createDirectory(<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      final MasterProcedureEnv env,<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    mfs.getFileSystem().mkdirs(<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      FSUtils.getNamespaceDir(mfs.getRootDir(), nsDescriptor.getName()));<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * undo create directory<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param env MasterProcedureEnv<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @throws IOException<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void rollbackCreateDirectory(final MasterProcedureEnv env) throws IOException {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    try {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      DeleteNamespaceProcedure.deleteDirectory(env, nsDescriptor.getName());<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    } catch (Exception e) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      // Ignore exception<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      LOG.debug("Rollback of createDirectory throws exception: " + e);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * Insert the row into ns table<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @param env MasterProcedureEnv<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @throws IOException<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  protected static void insertIntoNSTable(<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      final MasterProcedureEnv env,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    getTableNamespaceManager(env).insertIntoNSTable(nsDescriptor);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Undo the insert.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @param env MasterProcedureEnv<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @throws IOException<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  private void rollbackInsertIntoNSTable(final MasterProcedureEnv env) throws IOException {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    try {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      DeleteNamespaceProcedure.deleteFromNSTable(env, nsDescriptor.getName());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    } catch (Exception e) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // Ignore exception<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      LOG.debug("Rollback of insertIntoNSTable throws exception: " + e);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Update Zookeeper.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * @param env MasterProcedureEnv<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @throws IOException<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  protected static void updateZKNamespaceManager(<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      final MasterProcedureEnv env,<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    getTableNamespaceManager(env).updateZKNamespaceManager(nsDescriptor);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * rollback Zookeeper update.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @param env MasterProcedureEnv<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @throws IOException<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private void rollbackZKNamespaceManagerChange(final MasterProcedureEnv env) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    try {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      DeleteNamespaceProcedure.removeFromZKNamespaceManager(env, nsDescriptor.getName());<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    } catch (Exception e) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      // Ignore exception<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      LOG.debug("Rollback of updateZKNamespaceManager throws exception: " + e);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * Set quota for the namespace<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @param env MasterProcedureEnv<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @throws IOException<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   **/<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  protected static void setNamespaceQuota(<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      final MasterProcedureEnv env,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    if (env.getMasterServices().isInitialized()) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      env.getMasterServices().getMasterQuotaManager().setNamespaceQuota(nsDescriptor);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  /**<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * remove quota for the namespace if exists<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @param env MasterProcedureEnv<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @throws IOException<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   **/<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  private void rollbackSetNamespaceQuota(final MasterProcedureEnv env) throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    try {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      DeleteNamespaceProcedure.removeNamespaceQuota(env, nsDescriptor.getName());<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    } catch (Exception e) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      // Ignore exception<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      LOG.debug("Rollback of setNamespaceQuota throws exception: " + e);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private static TableNamespaceManager getTableNamespaceManager(final MasterProcedureEnv env) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return env.getMasterServices().getClusterSchema().getTableNamespaceManager();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * The procedure could be restarted from a different machine. If the variable is null, we need to<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * retrieve it.<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @return traceEnabled<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private Boolean isTraceEnabled() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (traceEnabled == null) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      traceEnabled = LOG.isTraceEnabled();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    return traceEnabled;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>}<a name="line.367"></a>
+<span class="sourceLineNo">197</span>  private boolean isBootstrapNamespace() {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    return nsDescriptor.equals(NamespaceDescriptor.DEFAULT_NAMESPACE) ||<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        nsDescriptor.equals(NamespaceDescriptor.SYSTEM_NAMESPACE);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  protected boolean acquireLock(final MasterProcedureEnv env) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (!env.getMasterServices().isInitialized()) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // Namespace manager might not be ready if master is not fully initialized,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // return false to reject user namespace creation; return true for default<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      // and system namespace creation (this is part of master initialization).<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (!isBootstrapNamespace() &amp;&amp; env.waitInitialized(this)) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        return false;<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>    return env.getProcedureQueue().tryAcquireNamespaceExclusiveLock(this, getNamespaceName());<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  @Override<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  protected void releaseLock(final MasterProcedureEnv env) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    env.getProcedureQueue().releaseNamespaceExclusiveLock(this, getNamespaceName());<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  @Override<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  public TableName getTableName() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    return TableName.NAMESPACE_TABLE_NAME;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>  @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public TableOperationType getTableOperationType() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return TableOperationType.EDIT;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private String getNamespaceName() {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    return nsDescriptor.getName();<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>  /**<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * Action before any real action of creating namespace.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * @param env MasterProcedureEnv<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * @throws IOException<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private void prepareCreate(final MasterProcedureEnv env) throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    if (getTableNamespaceManager(env).doesNamespaceExist(nsDescriptor.getName())) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      throw new NamespaceExistException(nsDescriptor.getName());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    getTableNamespaceManager(env).validateTableAndRegionCount(nsDescriptor);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  /**<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * Create the namespace directory<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * @param env MasterProcedureEnv<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @throws IOException<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  protected static void createDirectory(<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      final MasterProcedureEnv env,<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    mfs.getFileSystem().mkdirs(<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      FSUtils.getNamespaceDir(mfs.getRootDir(), nsDescriptor.getName()));<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * undo create directory<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @param env MasterProcedureEnv<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * @throws IOException<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  private void rollbackCreateDirectory(final MasterProcedureEnv env) throws IOException {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    try {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      DeleteNamespaceProcedure.deleteDirectory(env, nsDescriptor.getName());<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    } catch (Exception e) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      // Ignore exception<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      LOG.debug("Rollback of createDirectory throws exception: " + e);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * Insert the row into ns table<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @param env MasterProcedureEnv<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @throws IOException<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  protected static void insertIntoNSTable(<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      final MasterProcedureEnv env,<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    getTableNamespaceManager(env).insertIntoNSTable(nsDescriptor);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * Undo the insert.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @param env MasterProcedureEnv<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * @throws IOException<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  private void rollbackInsertIntoNSTable(final MasterProcedureEnv env) throws IOException {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      DeleteNamespaceProcedure.deleteFromNSTable(env, nsDescriptor.getName());<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (Exception e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Ignore exception<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.debug("Rollback of insertIntoNSTable throws exception: " + e);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * Update Zookeeper.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @param env MasterProcedureEnv<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @throws IOException<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  protected static void updateZKNamespaceManager(<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      final MasterProcedureEnv env,<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    getTableNamespaceManager(env).updateZKNamespaceManager(nsDescriptor);<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>  /**<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * rollback Zookeeper update.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * @param env MasterProcedureEnv<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * @throws IOException<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  private void rollbackZKNamespaceManagerChange(final MasterProcedureEnv env) throws IOException {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    try {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      DeleteNamespaceProcedure.removeFromZKNamespaceManager(env, nsDescriptor.getName());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    } catch (Exception e) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      // Ignore exception<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      LOG.debug("Rollback of updateZKNamespaceManager throws exception: " + e);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  /**<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * Set quota for the namespace<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * @param env MasterProcedureEnv<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * @param nsDescriptor NamespaceDescriptor<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @throws IOException<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   **/<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  protected static void setNamespaceQuota(<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      final MasterProcedureEnv env,<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      final NamespaceDescriptor nsDescriptor) throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    if (env.getMasterServices().isInitialized()) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      env.getMasterServices().getMasterQuotaManager().setNamespaceQuota(nsDescriptor);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * remove quota for the namespace if exists<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @param env MasterProcedureEnv<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @throws IOException<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   **/<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  private void rollbackSetNamespaceQuota(final MasterProcedureEnv env) throws IOException {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    try {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      DeleteNamespaceProcedure.removeNamespaceQuota(env, nsDescriptor.getName());<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    } catch (Exception e) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      // Ignore exception<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      LOG.debug("Rollback of setNamespaceQuota throws exception: " + e);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  private static TableNamespaceManager getTableNamespaceManager(final MasterProcedureEnv env) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    return env.getMasterServices().getClusterSchema().getTableNamespaceManager();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * The procedure could be restarted from a different machine. If the variable is null, we need to<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * retrieve it.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return traceEnabled<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private Boolean isTraceEnabled() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    if (traceEnabled == null) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      traceEnabled = LOG.isTraceEnabled();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return traceEnabled;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    // hbase and default namespaces are created on bootstrap internally by the system<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // the client does not know about this procedures.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return !isBootstrapNamespace();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>}<a name="line.376"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
index 9a4831f..e4170bb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
@@ -456,7 +456,14 @@
 <span class="sourceLineNo">448</span>      final TableName tableName) throws IOException {<a name="line.448"></a>
 <span class="sourceLineNo">449</span>    env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.449"></a>
 <span class="sourceLineNo">450</span>  }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>}<a name="line.451"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  @Override<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // system tables are created on bootstrap internally by the system<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    // the client does not know about this procedures.<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return !getTableName().isSystemTable();<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span>}<a name="line.458"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
index 9a4831f..e4170bb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
@@ -456,7 +456,14 @@
 <span class="sourceLineNo">448</span>      final TableName tableName) throws IOException {<a name="line.448"></a>
 <span class="sourceLineNo">449</span>    env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.449"></a>
 <span class="sourceLineNo">450</span>  }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>}<a name="line.451"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  @Override<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // system tables are created on bootstrap internally by the system<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    // the client does not know about this procedures.<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return !getTableName().isSystemTable();<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span>}<a name="line.458"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
index 75a0e93..11371e4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
@@ -775,7 +775,14 @@
 <span class="sourceLineNo">767</span>  protected boolean isYieldBeforeExecuteFromState(MasterProcedureEnv env, ServerCrashState state) {<a name="line.767"></a>
 <span class="sourceLineNo">768</span>    return true;<a name="line.768"></a>
 <span class="sourceLineNo">769</span>  }<a name="line.769"></a>
-<span class="sourceLineNo">770</span>}<a name="line.770"></a>
+<span class="sourceLineNo">770</span><a name="line.770"></a>
+<span class="sourceLineNo">771</span>  @Override<a name="line.771"></a>
+<span class="sourceLineNo">772</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    // The operation is triggered internally on the server<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    // the client does not know about this procedure.<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return false;<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span>}<a name="line.777"></a>
 
 
 


[19/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 9322553..99414bf 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 be0e539..95c586a 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 fd33a53..5e0704d 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 39f199f..3f366a1 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 ba10f40..9a9e6e2 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 484f64f..fc01b50 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 362e7eb..60abcb1 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 d6449e5..debb068 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 3f02fae..01acac1 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 3c8c09f..cbad69d 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 753b68b..7265ecc 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 0c140b5..3fd406d 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 5966c1b..c9a8ac1 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 6f5dd1a..c76ecbe 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 39c96bf..f9f1c3b 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/hbase-shaded-client-project/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/distribution-management.html b/hbase-archetypes/hbase-shaded-client-project/distribution-management.html
index 86b00e7..7822b6b 100644
--- a/hbase-archetypes/hbase-shaded-client-project/distribution-management.html
+++ b/hbase-archetypes/hbase-shaded-client-project/distribution-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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 136f421..d5f226d 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 b8ef592..0472632 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 08e3c2c..494d604 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 5053a67..6ffc468 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 44fcfc7..97d184a 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 58089b7..65cd45a 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 269d681..986dd30 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 f3cb1c6..999d722 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 cf20563..28e60ec 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 af82e65..7cdda30 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 7ca5cf9..12bfae1 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 2c1f4a1..579c413 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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/index.html b/hbase-archetypes/index.html
index 785bd19..b9cdbc2 100644
--- a/hbase-archetypes/index.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/integration.html b/hbase-archetypes/integration.html
index 0b1a475..2e48144 100644
--- a/hbase-archetypes/integration.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/issue-tracking.html b/hbase-archetypes/issue-tracking.html
index 23d42ed..21ec9ff 100644
--- a/hbase-archetypes/issue-tracking.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/license.html b/hbase-archetypes/license.html
index 986ad38..8066b47 100644
--- a/hbase-archetypes/license.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/mail-lists.html b/hbase-archetypes/mail-lists.html
index de497ab..19d0b26 100644
--- a/hbase-archetypes/mail-lists.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/modules.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/modules.html b/hbase-archetypes/modules.html
index 2d8f701..2f29704 100644
--- a/hbase-archetypes/modules.html
+++ b/hbase-archetypes/modules.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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/plugin-management.html b/hbase-archetypes/plugin-management.html
index c8975e4..8154c97 100644
--- a/hbase-archetypes/plugin-management.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/plugins.html b/hbase-archetypes/plugins.html
index e22aaeb..2d93fe3 100644
--- a/hbase-archetypes/plugins.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/project-info.html b/hbase-archetypes/project-info.html
index 8cc9cbb..410b1c5 100644
--- a/hbase-archetypes/project-info.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/project-summary.html b/hbase-archetypes/project-summary.html
index 149309d..7bf9fe5 100644
--- a/hbase-archetypes/project-summary.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/source-repository.html b/hbase-archetypes/source-repository.html
index 1d051b8..3afd409 100644
--- a/hbase-archetypes/source-repository.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-archetypes/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/team-list.html b/hbase-archetypes/team-list.html
index 2549c6b..aefc5da 100644
--- a/hbase-archetypes/team-list.html
+++ b/hbase-archetypes/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-spark/checkstyle.html b/hbase-spark/checkstyle.html
index 396f7a9..b3c0c28 100644
--- a/hbase-spark/checkstyle.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>
@@ -158,13 +158,13 @@
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.html#L32">32</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.html#L34">34</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.html#L172">172</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.html#L174">174</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.spark.example.hbasecontext.JavaHBaseBulkDeleteExample.java">org/apache/hadoop/hbase/spark/example/hbasecontext/JavaHBaseBulkDeleteExample.java</h3>
 <table border="0" class="bodyTable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependencies.html b/hbase-spark/dependencies.html
index d607a7c..a97df83 100644
--- a/hbase-spark/dependencies.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-convergence.html b/hbase-spark/dependency-convergence.html
index 18b2d28..7e389a2 100644
--- a/hbase-spark/dependency-convergence.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-info.html b/hbase-spark/dependency-info.html
index 4ba0fed..1446707 100644
--- a/hbase-spark/dependency-info.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-management.html b/hbase-spark/dependency-management.html
index 0f099a2..b05e459 100644
--- a/hbase-spark/dependency-management.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/distribution-management.html b/hbase-spark/distribution-management.html
index b7603e5..0832218 100644
--- a/hbase-spark/distribution-management.html
+++ b/hbase-spark/distribution-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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-spark/index.html b/hbase-spark/index.html
index 3b66449..1b9afd3 100644
--- a/hbase-spark/index.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-spark/integration.html b/hbase-spark/integration.html
index b121687..376edf5 100644
--- a/hbase-spark/integration.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-spark/issue-tracking.html b/hbase-spark/issue-tracking.html
index fc40346..5815f3f 100644
--- a/hbase-spark/issue-tracking.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/license.html
----------------------------------------------------------------------
diff --git a/hbase-spark/license.html b/hbase-spark/license.html
index f39082a..804e75b 100644
--- a/hbase-spark/license.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/hbase-spark/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-spark/mail-lists.html b/hbase-spark/mail-lists.html
index 7f0aef1..ec6cbc6 100644
--- a/hbase-spark/mail-lists.html
+++ b/hbase-spark/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 2016-03-08 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-03-10 -->
 <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="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-03-08</span>
+        <span id="publishDate">Last Published: 2016-03-10</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>


[13/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
index 79aa3db..3cbc9f0 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestProcEnv.html
@@ -27,264 +27,368 @@
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileSystem;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.After;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.junit.Before;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.Test;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.experimental.categories.Category;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import static org.junit.Assert.assertEquals;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import static org.junit.Assert.assertTrue;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>@Category({MasterTests.class, SmallTests.class})<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TestYieldProcedures {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Procedure NULL_PROC = null;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private ProcedureStore procStore;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private HBaseCommonTestingUtility htu;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private FileSystem fs;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private Path testDir;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private Path logDir;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @Before<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public void setUp() throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    htu = new HBaseCommonTestingUtility();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    testDir = htu.getDataTestDir();<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    logDir = new Path(testDir, "proc-logs");<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(), procStore);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @After<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public void tearDown() throws IOException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    procExecutor.stop();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    procStore.stop(false);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    fs.delete(logDir, 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>  @Test<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    final int NUM_STATES = 3;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      procExecutor.submitProcedure(procs[i]);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // verify yield during execute()<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    long prevTimestamp = 0;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(execStep);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        assertEquals(false, info.isRollback());<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        prevTimestamp++;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      }<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>    // verify yield during rollback()<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    int count = NUM_STATES;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(count);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        assertEquals(true, info.isRollback());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        prevTimestamp++;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      count++;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final int NUM_STATES = 3;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.126"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Before;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertEquals;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import static org.junit.Assert.assertTrue;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, SmallTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestYieldProcedures {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Procedure NULL_PROC = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TestRunQueue procRunnables;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private ProcedureStore procStore;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private HBaseCommonTestingUtility htu;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileSystem fs;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Path testDir;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Path logDir;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Before<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setUp() throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htu = new HBaseCommonTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    testDir = htu.getDataTestDir();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    logDir = new Path(testDir, "proc-logs");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    procRunnables = new TestRunQueue();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        procStore, procRunnables);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @After<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void tearDown() throws IOException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    procExecutor.stop();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    procStore.stop(false);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fs.delete(logDir, true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    final int NUM_STATES = 3;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      procExecutor.submitProcedure(procs[i]);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // verify execution<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int index = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(false, info.isRollback());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      // verify rollback<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertEquals(true, info.isRollback());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // check runnable queue stats<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, procRunnables.size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertEquals(18, procRunnables.addBackCalls);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(15, procRunnables.yieldCalls);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertEquals(19, procRunnables.pollCalls);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(3, procRunnables.completionCalls);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final int NUM_STATES = 3;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    int count = 0;<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      assertEquals(false, info.isRollback());<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      assertEquals(i, info.getStep().ordinal());<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>      info = proc.getExecutionInfo().get(count++);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      assertEquals(false, info.isRollback());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      assertEquals(i, info.getStep().ordinal());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(true, info.isRollback());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      assertEquals(i, info.getStep().ordinal());<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>      info = proc.getExecutionInfo().get(count++);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      assertEquals(true, info.isRollback());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      assertEquals(i, info.getStep().ordinal());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private static class TestProcEnv {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public long nextTimestamp() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return timestamp.incrementAndGet();<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><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static class TestStateMachineProcedure<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    public class ExecutionInfo {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      private final boolean rollback;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      private final long timestamp;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      private final State step;<a name="line.167"></a>
+<span class="sourceLineNo">128</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertEquals(false, info.isRollback());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      assertEquals(i, info.getStep().ordinal());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      info = proc.getExecutionInfo().get(count++);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      assertEquals(false, info.isRollback());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      assertEquals(i, info.getStep().ordinal());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(true, info.isRollback());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      assertEquals(i, info.getStep().ordinal());<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>      info = proc.getExecutionInfo().get(count++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertEquals(true, info.isRollback());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(i, info.getStep().ordinal());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // check runnable queue stats<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertEquals(0, procRunnables.size());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(12, procRunnables.addBackCalls);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertEquals(11, procRunnables.yieldCalls);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertEquals(13, procRunnables.pollCalls);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public void testYieldException() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    TestYieldProcedure proc = new TestYieldProcedure();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertEquals(6, proc.step);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        this.timestamp = timestamp;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        this.step = step;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        this.rollback = isRollback;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>      public State getStep() { return step; }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      public long getTimestamp() { return timestamp; }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      public boolean isRollback() { return rollback; }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    private final boolean abortOnFinalStep;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    public TestStateMachineProcedure() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      this(false, false);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">169</span>    // check runnable queue stats<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(0, procRunnables.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(6, procRunnables.addBackCalls);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(5, procRunnables.yieldCalls);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    assertEquals(7, procRunnables.pollCalls);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static class TestProcEnv {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    public long nextTimestamp() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return timestamp.incrementAndGet();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public static class TestStateMachineProcedure<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public class ExecutionInfo {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      private final boolean rollback;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      private final long timestamp;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      private final State step;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return executionInfo;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        throws InterruptedException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      LOG.info("execute step " + state);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, false));<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      Thread.sleep(150);<a name="line.204"></a>
+<span class="sourceLineNo">195</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        this.timestamp = timestamp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        this.step = step;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.rollback = isRollback;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      public State getStep() { return step; }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      public long getTimestamp() { return timestamp; }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public boolean isRollback() { return rollback; }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
 <span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.debug("THROW INTERRUPT");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new InterruptedException("test interrupt");<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">206</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    private final boolean abortOnFinalStep;<a name="line.209"></a>
 <span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>      switch (state) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        case STATE_1:<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          setNextState(State.STATE_2);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        case STATE_2:<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          setNextState(State.STATE_3);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        case STATE_3:<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          if (abortOnFinalStep) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          return Flow.NO_MORE_STATE;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        default:<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          throw new UnsupportedOperationException();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      return Flow.HAS_MORE_STATE;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        throws InterruptedException {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      LOG.debug("rollback state " + state);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, true));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Thread.sleep(150);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        LOG.debug("THROW INTERRUPT");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throw new InterruptedException("test interrupt");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      switch (state) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        case STATE_1:<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        case STATE_2:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          break;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case STATE_3:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        default:<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          throw new UnsupportedOperationException();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected State getState(final int stateId) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return State.values()[stateId];<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    protected int getStateId(final State state) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      return state.ordinal();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    protected State getInitialState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return State.STATE_1;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return true;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    protected boolean abort(TestProcEnv env) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      aborted.set(true);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>}<a name="line.279"></a>
+<span class="sourceLineNo">211</span>    public TestStateMachineProcedure() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      this(false, false);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return executionInfo;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        throws InterruptedException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final long ts = env.nextTimestamp();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info(getProcId() + " execute step " + state + " ts=" + ts);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      executionInfo.add(new ExecutionInfo(ts, state, false));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Thread.sleep(150);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.debug("THROW INTERRUPT");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        throw new InterruptedException("test interrupt");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      switch (state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        case STATE_1:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          setNextState(State.STATE_2);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          break;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        case STATE_2:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          setNextState(State.STATE_3);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          break;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        case STATE_3:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          if (abortOnFinalStep) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          return Flow.NO_MORE_STATE;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        default:<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          throw new UnsupportedOperationException();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return Flow.HAS_MORE_STATE;<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>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throws InterruptedException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      final long ts = env.nextTimestamp();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      LOG.debug(getProcId() + " rollback state " + state + " ts=" + ts);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      executionInfo.add(new ExecutionInfo(ts, state, true));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Thread.sleep(150);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("THROW INTERRUPT");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        throw new InterruptedException("test interrupt");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      switch (state) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        case STATE_1:<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          break;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        case STATE_2:<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          break;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        case STATE_3:<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          break;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        default:<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          throw new UnsupportedOperationException();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    protected State getState(final int stateId) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return State.values()[stateId];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    protected int getStateId(final State state) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return state.ordinal();<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>    @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    protected State getInitialState() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return State.STATE_1;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return true;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    protected boolean abort(TestProcEnv env) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      aborted.set(true);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static class TestYieldProcedure extends Procedure&lt;TestProcEnv&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private int step = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public TestYieldProcedure() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>    @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    protected Procedure[] execute(final TestProcEnv env) throws ProcedureYieldException {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.info("execute step " + step);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (step++ &lt; 5) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        throw new ProcedureYieldException();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return null;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected void rollback(TestProcEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected boolean abort(TestProcEnv env) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    protected boolean isYieldAfterExecutionStep(final TestProcEnv env) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return true;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    protected void serializeStateData(final OutputStream stream) throws IOException {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    @Override<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    protected void deserializeStateData(final InputStream stream) throws IOException {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private static class TestRunQueue extends ProcedureSimpleRunQueue {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    private int completionCalls;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    private int addFrontCalls;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    private int addBackCalls;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private int yieldCalls;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private int pollCalls;<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public TestRunQueue() {}<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public void addFront(final Procedure proc) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        addFrontCalls++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        super.addFront(proc);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      public void addBack(final Procedure proc) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        addBackCalls++;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        super.addBack(proc);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>      @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      public void yield(final Procedure proc) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        yieldCalls++;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        super.yield(proc);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      public Procedure poll() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        pollCalls++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return super.poll();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      public void completionCleanup(Procedure proc) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        completionCalls++;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>}<a name="line.383"></a>
 
 
 


[27/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5699"></a

<TRUNCATED>

[43/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html
index 5d88098..746d8e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html
@@ -142,7 +142,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute(TEnvironment)">execute</a>, <a href="../../../../../org/apach
 e/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootPr
 ocedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a
 >, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback(TEnvironment)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData(java.io.OutputStream)">serializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../
 org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/proce
 dure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute(TEnvironment)">execute</a>, <a href="../../../../../org/apach
 e/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootPr
 ocedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a
 >, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback(TEnvironment)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData(java.io.OutputStream)">serializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../
 org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/proce
 dure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 427fb12..1539999 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -172,11 +172,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
index 8d2e22f..5364419 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
@@ -107,7 +107,7 @@
 </dl>
 <hr>
 <br>
-<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5449">HRegion.RegionScannerImpl</a>
+<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5452">HRegion.RegionScannerImpl</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).</div>
@@ -411,7 +411,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>storeHeap</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5451">storeHeap</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5454">storeHeap</a></pre>
 </li>
 </ul>
 <a name="joinedHeap">
@@ -420,7 +420,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>joinedHeap</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5454">joinedHeap</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5457">joinedHeap</a></pre>
 <div class="block">Heap of key-values that are not essential for the provided filters and are thus read
  on demand, if on-demand column family loading is enabled.</div>
 </li>
@@ -431,7 +431,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>joinedContinuationRow</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5458">joinedContinuationRow</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5461">joinedContinuationRow</a></pre>
 <div class="block">If the joined heap data gathering is interrupted due to scan limits, this will
  contain the row for which we are populating the values.</div>
 </li>
@@ -442,7 +442,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>filterClosed</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5459">filterClosed</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5462">filterClosed</a></pre>
 </li>
 </ul>
 <a name="isScan">
@@ -451,7 +451,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>isScan</h4>
-<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5461">isScan</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5464">isScan</a></pre>
 </li>
 </ul>
 <a name="stopRow">
@@ -460,7 +460,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>stopRow</h4>
-<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5462">stopRow</a></pre>
+<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5465">stopRow</a></pre>
 </li>
 </ul>
 <a name="region">
@@ -469,7 +469,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5463">region</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5466">region</a></pre>
 </li>
 </ul>
 <a name="comparator">
@@ -478,7 +478,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>comparator</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5464">comparator</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5467">comparator</a></pre>
 </li>
 </ul>
 <a name="copyCellsFromSharedMem">
@@ -487,7 +487,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>copyCellsFromSharedMem</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5465">copyCellsFromSharedMem</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5468">copyCellsFromSharedMem</a></pre>
 </li>
 </ul>
 <a name="readPt">
@@ -496,7 +496,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>readPt</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5467">readPt</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5470">readPt</a></pre>
 </li>
 </ul>
 <a name="maxResultSize">
@@ -505,7 +505,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>maxResultSize</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5468">maxResultSize</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5471">maxResultSize</a></pre>
 </li>
 </ul>
 <a name="defaultScannerContext">
@@ -514,7 +514,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>defaultScannerContext</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5469">defaultScannerContext</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5472">defaultScannerContext</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -523,7 +523,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>filter</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.html" title="class in org.apache.hadoop.hbase.filter">FilterWrapper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5470">filter</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.html" title="class in org.apache.hadoop.hbase.filter">FilterWrapper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5473">filter</a></pre>
 </li>
 </ul>
 </li>
@@ -540,7 +540,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegion.RegionScannerImpl</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5481">HRegion.RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5484">HRegion.RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners,
                          <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                          boolean&nbsp;copyCellsFromSharedMem)
@@ -563,7 +563,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5473">getRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5476">getRegionInfo</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getRegionInfo()">getRegionInfo</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -576,7 +576,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>setCopyCellsFromSharedMem</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5477">setCopyCellsFromSharedMem</a>(boolean&nbsp;copyCells)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5480">setCopyCellsFromSharedMem</a>(boolean&nbsp;copyCells)</pre>
 </li>
 </ul>
 <a name="initializeKVHeap(java.util.List, java.util.List, org.apache.hadoop.hbase.regionserver.HRegion)">
@@ -585,7 +585,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeKVHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5545">initializeKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5548">initializeKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -599,7 +599,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5555">getMaxResultSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5558">getMaxResultSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getMaxResultSize()">getMaxResultSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -613,7 +613,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getMvccReadPoint</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5560">getMvccReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5563">getMvccReadPoint</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getMvccReadPoint()">getMvccReadPoint</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -626,7 +626,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatch</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5565">getBatch</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5568">getBatch</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getBatch()">getBatch</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -640,7 +640,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>resetFilters</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5574">resetFilters</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5577">resetFilters</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Reset both the filter and the old filter.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -653,7 +653,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5581">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5584">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List)">InternalScanner</a></code></strong></div>
 <div class="block">Grab the next row's worth of values.</div>
@@ -672,7 +672,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5588">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5591">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
            <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List,%20org.apache.hadoop.hbase.regionserver.ScannerContext)">InternalScanner</a></code></strong></div>
@@ -692,7 +692,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5605">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5608">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#nextRaw(java.util.List)">RegionScanner</a></code></strong></div>
 <div class="block">Grab the next row's worth of values. This is a special internal method to be called from
@@ -714,7 +714,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5611">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5614">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
               <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#nextRaw(java.util.List,%20org.apache.hadoop.hbase.regionserver.ScannerContext)">RegionScanner</a></code></strong></div>
@@ -756,7 +756,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>populateFromJoinedHeap</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5666">populateFromJoinedHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5669">populateFromJoinedHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if more cells exist after this batch, false if scanner is done</dd>
@@ -770,7 +770,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>populateResult</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5690">populateResult</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5693">populateResult</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&nbsp;heap,
                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
                      <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)
@@ -789,7 +789,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>moreCellsInRow</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5735">moreCellsInRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;nextKv,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5738">moreCellsInRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;nextKv,
                      <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
 <div class="block">Based on the nextKv in the heap, and the current row, decide whether or not there are more
  cells to be read in the heap. If the row of the nextKv in the heap matches the current row
@@ -804,7 +804,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>isFilterDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5743">isFilterDone</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5746">isFilterDone</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -820,7 +820,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>isFilterDoneInternal</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5747">isFilterDoneInternal</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5750">isFilterDoneInternal</a>()
                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -832,7 +832,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextInternal</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5751">nextInternal</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5754">nextInternal</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -845,7 +845,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementCountOfRowsFilteredMetric</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5950">incrementCountOfRowsFilteredMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5953">incrementCountOfRowsFilteredMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
 </li>
 </ul>
 <a name="incrementCountOfRowsScannedMetric(org.apache.hadoop.hbase.regionserver.ScannerContext)">
@@ -854,7 +854,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementCountOfRowsScannedMetric</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5958">incrementCountOfRowsScannedMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5961">incrementCountOfRowsScannedMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
 </li>
 </ul>
 <a name="joinedHeapMayHaveData(org.apache.hadoop.hbase.Cell)">
@@ -863,7 +863,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>joinedHeapMayHaveData</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5969">joinedHeapMayHaveData</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5972">joinedHeapMayHaveData</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>currentRowCell</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>true when the joined heap may have data for the current row</dd>
@@ -877,7 +877,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>filterRow</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5996">filterRow</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.5999">filterRow</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This function is to maintain backward compatibility for 0.94 filters. HBASE-6429 combines
  both filterRow & filterRow(<code>List&lt;KeyValue&gt; kvs</code>) functions. While 0.94 code or older,
@@ -894,7 +894,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>filterRowKey</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6003">filterRowKey</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;current)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6006">filterRowKey</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;current)
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -906,7 +906,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRow</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6007">nextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6010">nextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
               <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;curRowCell)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -919,7 +919,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopRow</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6022">isStopRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6025">isStopRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
 </li>
 </ul>
 <a name="close()">
@@ -928,7 +928,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6029">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6032">close</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#close()">InternalScanner</a></code></strong></div>
 <div class="block">Closes the scanner and releases any resources it has allocated</div>
 <dl>
@@ -947,7 +947,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreHeapForTesting</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6043">getStoreHeapForTesting</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6046">getStoreHeapForTesting</a>()</pre>
 </li>
 </ul>
 <a name="reseek(byte[])">
@@ -956,7 +956,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>reseek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6048">reseek</a>(byte[]&nbsp;row)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6051">reseek</a>(byte[]&nbsp;row)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#reseek(byte[])">RegionScanner</a></code></strong></div>
 <div class="block">Do a reseek to the required row. Should not be used to seek to a key which
@@ -975,7 +975,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>handleFileNotFound</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6069">handleFileNotFound</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a>&nbsp;fnfe)
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6072">handleFileNotFound</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a>&nbsp;fnfe)
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -987,7 +987,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>abortRegionServer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6084">abortRegionServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6087">abortRegionServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -999,7 +999,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>shipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6092">shipped</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6095">shipped</a>()
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html#shipped()">Shipper</a></code></strong></div>
 <div class="block">Called after a batch of rows scanned and set to be returned to client. Any in between cleanup
@@ -1017,7 +1017,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6102">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6105">run</a>()
          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run()">RpcCallback</a></code></strong></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>


[23/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5699"></a>
+<span class="sourceLineNo">5700</span>      try {<a name=

<TRUNCATED>

[05/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
index e8e86bf..4be7696 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
@@ -25,526 +25,588 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertTrue;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.fail;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.Callable;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.commons.logging.Log;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.commons.logging.LogFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.impl.Log4JLogger;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Put;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Result;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Table;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.log4j.Level;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.After;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import com.google.protobuf.RpcController;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import com.google.protobuf.ServiceException;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * accumulated (potentially empty).<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category(MediumTests.class)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestScannerHeartbeatMessages {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private static Table TABLE = null;<a name="line.82"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.Callable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.lang.exception.ExceptionUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.impl.Log4JLogger;<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.Path;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CoordinatedStateManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableName;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ScannerCallable;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Table;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.log4j.Level;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Before;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.BeforeClass;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>import com.google.protobuf.RpcController;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import com.google.protobuf.ServiceException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * Here we test to make sure that scans return the expected Results when the server is sending the<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Client heartbeat messages. Heartbeat messages are essentially keep-alive messages (they prevent<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the scanner on the client side from timing out). A heartbeat message is sent from the server to<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the client when the server has exceeded the time limit during the processing of the scan. When<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * the time limit is reached, the server will return to the Client whatever Results it has<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * accumulated (potentially empty).<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category(MediumTests.class)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>public class TestScannerHeartbeatMessages {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final Log LOG = LogFactory.getLog(TestScannerHeartbeatMessages.class);<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Table configuration<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static int NUM_ROWS = 10;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.91"></a>
+<span class="sourceLineNo">084</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static Table TABLE = null;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Table configuration<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static TableName TABLE_NAME = TableName.valueOf("testScannerHeartbeatMessagesTable");<a name="line.91"></a>
 <span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static int NUM_FAMILIES = 3;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.95"></a>
+<span class="sourceLineNo">093</span>  private static int NUM_ROWS = 5;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static int NUM_QUALIFIERS = 3;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.99"></a>
+<span class="sourceLineNo">097</span>  private static int NUM_FAMILIES = 3;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static int VALUE_SIZE = 128;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // message to the client<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  // reached<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @BeforeClass<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // Check the timeout condition after every cell<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    TEST_UTIL.startMiniCluster(1);<a name="line.132"></a>
+<span class="sourceLineNo">101</span>  private static int NUM_QUALIFIERS = 3;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static int VALUE_SIZE = 128;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Time, in milliseconds, that the client will wait for a response from the server before timing<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // out. This value is used server side to determine when it is necessary to send a heartbeat<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // message to the client<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static int CLIENT_TIMEOUT = 2000;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  // The server limits itself to running for half of the CLIENT_TIMEOUT value.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static int SERVER_TIME_LIMIT = CLIENT_TIMEOUT / 2;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // By default, at most one row's worth of cells will be retrieved before the time limit is reached<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private static int DEFAULT_ROW_SLEEP_TIME = SERVER_TIME_LIMIT / 2;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // By default, at most cells for two column families are retrieved before the time limit is<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // reached<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static int DEFAULT_CF_SLEEP_TIME = DEFAULT_ROW_SLEEP_TIME / NUM_FAMILIES;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  @BeforeClass<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public static void setUpBeforeClass() throws Exception {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ((Log4JLogger) ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ((Log4JLogger) HeartbeatRPCServices.LOG).getLogger().setLevel(Level.ALL);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.setStrings(HConstants.REGION_IMPL, HeartbeatHRegion.class.getName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    conf.setStrings(HConstants.REGION_SERVER_IMPL, HeartbeatHRegionServer.class.getName());<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, CLIENT_TIMEOUT);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, CLIENT_TIMEOUT);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    conf.setInt(HConstants.HBASE_CLIENT_PAUSE, 1);<a name="line.132"></a>
 <span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    ht.put(puts);<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return ht;<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>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param rows<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param families<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param qualifiers<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param value<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      byte[] value) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Put put;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      put = new Put(rows[row]);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          put.add(kv);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      puts.add(put);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return puts;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @AfterClass<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public static void tearDownAfterClass() throws Exception {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Before<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public void setupBeforeTest() throws Exception {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    disableSleeping();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @After<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  public void teardownAfterTest() throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    disableSleeping();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * other due to changing static variables<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 testScannerHeartbeatMessages() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * disabled, the test should throw an exception.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param testCallable<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @throws InterruptedException<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      testCallable.call();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    } catch (Exception e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          + ExceptionUtils.getStackTrace(e));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    try {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      testCallable.call();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    } catch (Exception e) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    } finally {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * fetched.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return new Callable&lt;Void&gt;() {<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      public Void call() throws Exception {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // the case where a scan stops on the server side due to a time limit<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        Scan scan = new Scan();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        return null;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    };<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * @throws Exception<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return new Callable&lt;Void&gt;() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      public Void call() throws Exception {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        // the case where a scan stops on the server side due to a time limit<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        Scan baseScan = new Scan();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // fields may be changed such as start row<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        Scan scanCopy = new Scan(baseScan);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        scanCopy = new Scan(baseScan);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return null;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    };<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * necessary<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * @param scan The scan configuration being tested<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   *          that column family are fetched<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   */<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    disableSleeping();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Result r1 = null;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    Result r2 = null;<a name="line.295"></a>
+<span class="sourceLineNo">134</span>    // Check the timeout condition after every cell<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    TEST_UTIL.startMiniCluster(1);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ht.put(puts);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return ht;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Make puts to put the input value into each combination of row, family, and qualifier<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param rows<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param families<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param qualifiers<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param value<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      byte[] value) throws IOException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Put put;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      put = new Put(rows[row]);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          put.add(kv);<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>      puts.add(put);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return puts;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @AfterClass<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static void tearDownAfterClass() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    TEST_UTIL.deleteTable(TABLE_NAME);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Before<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void setupBeforeTest() throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    disableSleeping();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @After<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void teardownAfterTest() throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    disableSleeping();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Test a variety of scan configurations to ensure that they return the expected Results when<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * heartbeat messages are necessary. These tests are accumulated under one test case to ensure<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * that they don't run in parallel. If the tests ran in parallel, they may conflict with each<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * other due to changing static variables<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  @Test<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void testScannerHeartbeatMessages() throws Exception {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testImportanceOfHeartbeats(testHeartbeatBetweenRows());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    testImportanceOfHeartbeats(testHeartbeatBetweenColumnFamilies());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    testImportanceOfHeartbeats(testHeartbeatWithSparseFilter());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * Run the test callable when heartbeats are enabled/disabled. We expect all tests to only pass<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * when heartbeat messages are enabled (otherwise the test is pointless). When heartbeats are<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * disabled, the test should throw an exception.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * @param testCallable<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @throws InterruptedException<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public void testImportanceOfHeartbeats(Callable&lt;Void&gt; testCallable) throws InterruptedException {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      testCallable.call();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (Exception e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      fail("Heartbeat messages are enabled, exceptions should NOT be thrown. Exception trace:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          + ExceptionUtils.getStackTrace(e));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    HeartbeatRPCServices.heartbeatsEnabled = false;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      testCallable.call();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    } catch (Exception e) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } finally {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      HeartbeatRPCServices.heartbeatsEnabled = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    fail("Heartbeats messages are disabled, an exception should be thrown. If an exception "<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        + " is not thrown, the test case is not testing the importance of heartbeat messages");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Test the case that the time limit for the scan is reached after each full row of cells is<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * fetched.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @throws Exception<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Callable&lt;Void&gt; testHeartbeatBetweenRows() throws Exception {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return new Callable&lt;Void&gt;() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      public Void call() throws Exception {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // the case where a scan stops on the server side due to a time limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        Scan scan = new Scan();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        testEquivalenceOfScanWithHeartbeats(scan, DEFAULT_ROW_SLEEP_TIME, -1, false);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return null;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    };<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Test the case that the time limit for scans is reached in between column families<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @throws Exception<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public Callable&lt;Void&gt; testHeartbeatBetweenColumnFamilies() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return new Callable&lt;Void&gt;() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      public Void call() throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        // Configure the scan so that it can read the entire table in a single RPC. We want to test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // the case where a scan stops on the server side due to a time limit<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        Scan baseScan = new Scan();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        baseScan.setMaxResultSize(Long.MAX_VALUE);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        baseScan.setCaching(Integer.MAX_VALUE);<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>        // Copy the scan before each test. When a scan object is used by a scanner, some of its<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // fields may be changed such as start row<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        Scan scanCopy = new Scan(baseScan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, false);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        scanCopy = new Scan(baseScan);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        testEquivalenceOfScanWithHeartbeats(scanCopy, -1, DEFAULT_CF_SLEEP_TIME, true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return null;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    };<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public static class SparseFilter extends FilterBase{<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        Thread.sleep(SERVER_TIME_LIMIT + 10);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      } catch (InterruptedException e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Thread.currentThread().interrupt();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ?<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          ReturnCode.INCLUDE :<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          ReturnCode.SKIP;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
 <span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    while ((r1 = scanner.next()) != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      r2 = scannerWithHeartbeats.next();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      disableSleeping();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>      assertTrue(r2 != null);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        Result.compareResults(r1, r2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      } catch (Exception e) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        fail(e.getMessage());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    scanner.close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    scannerWithHeartbeats.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * is negative then that sleep will be disabled<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param rowSleepTime<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param cfSleepTime<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * Disable the sleeping mechanism server side.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static void disableSleeping() {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      super(conf);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf, csm);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return new HeartbeatRPCServices(this);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">297</span>    public static Filter parseFrom(final byte [] pbBytes){<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return new SparseFilter();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Test the case that there is a filter which filters most of cells<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @throws Exception<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Callable&lt;Void&gt; testHeartbeatWithSparseFilter() throws Exception {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return new Callable&lt;Void&gt;() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Void call() throws Exception {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Scan scan = new Scan();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        scan.setFilter(new SparseFilter());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResultScanner scanner = TABLE.getScanner(scan);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        int num = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        while (scanner.next() != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          num++;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertEquals(1, num);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        scanner.close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>        scan = new Scan();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        scan.setCaching(Integer.MAX_VALUE);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        scan.setFilter(new SparseFilter());<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        scan.setAllowPartialResults(true);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        scanner = TABLE.getScanner(scan);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        num = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        while (scanner.next() != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          num++;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        assertEquals(NUM_FAMILIES * NUM_QUALIFIERS, num);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        scanner.close();<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    };<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Test the equivalence of a scan versus the same scan executed when heartbeat messages are<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * necessary<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @param scan The scan configuration being tested<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @param rowSleepTime The time to sleep between fetches of row cells<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cfSleepTime The time to sleep between fetches of column family cells<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param sleepBeforeCf set to true when column family sleeps should occur before the cells for<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   *          that column family are fetched<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws Exception<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void testEquivalenceOfScanWithHeartbeats(final Scan scan, int rowSleepTime,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      int cfSleepTime, boolean sleepBeforeCf) throws Exception {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    disableSleeping();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    final ResultScanner scanner = TABLE.getScanner(scan);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    final ResultScanner scannerWithHeartbeats = TABLE.getScanner(scan);<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    Result r1 = null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    Result r2 = null;<a name="line.357"></a>
 <span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private static boolean heartbeatsEnabled = true;<a name="line.363"></a>
+<span class="sourceLineNo">359</span>    while ((r1 = scanner.next()) != null) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // Enforce the specified sleep conditions during calls to the heartbeat scanner<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      configureSleepTime(rowSleepTime, cfSleepTime, sleepBeforeCf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      r2 = scannerWithHeartbeats.next();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      disableSleeping();<a name="line.363"></a>
 <span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public HeartbeatRPCServices(HRegionServer rs) throws IOException {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      super(rs);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public ScanResponse scan(RpcController controller, ScanRequest request) <a name="line.370"></a>
-<span class="sourceLineNo">371</span>        throws ServiceException {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      ScanRequest.Builder builder = ScanRequest.newBuilder(request);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      builder.setClientHandlesHeartbeats(heartbeatsEnabled);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      return super.scan(controller, builder.build());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">365</span>      assertTrue(r2 != null);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        Result.compareResults(r1, r2);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      } catch (Exception e) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        fail(e.getMessage());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertTrue(scannerWithHeartbeats.next() == null);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    scanner.close();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    scannerWithHeartbeats.close();<a name="line.375"></a>
 <span class="sourceLineNo">376</span>  }<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
 <span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Custom HRegion class that instantiates {@link RegionScanner}s with configurable sleep times<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * between fetches of row Results and/or column family cells. Useful for emulating an instance<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * where the server is taking a long time to process a client's scan request<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static class HeartbeatHRegion extends HRegion {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Row sleeps occur AFTER each row worth of cells is retrieved.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private static int rowSleepTime = DEFAULT_ROW_SLEEP_TIME;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private static boolean sleepBetweenRows = false;<a name="line.386"></a>
+<span class="sourceLineNo">379</span>   * Helper method for setting the time to sleep between rows and column families. If a sleep time<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * is negative then that sleep will be disabled<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @param rowSleepTime<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @param cfSleepTime<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private static void configureSleepTime(int rowSleepTime, int cfSleepTime, boolean sleepBeforeCf) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    HeartbeatHRegion.sleepBetweenRows = rowSleepTime &gt; 0;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    HeartbeatHRegion.rowSleepTime = rowSleepTime;<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // The sleep for column families can be initiated before or after we fetch the cells for the<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    // column family. If the sleep occurs BEFORE then the time limits will be reached inside<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // StoreScanner while we are fetching individual cells. If the sleep occurs AFTER then the time<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // limit will be reached inside RegionScanner after all the cells for a column family have been<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // retrieved.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    private static boolean sleepBeforeColumnFamily = false;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    private static int columnFamilySleepTime = DEFAULT_CF_SLEEP_TIME;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    private static boolean sleepBetweenColumnFamilies = false;<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public HeartbeatHRegion(Path tableDir, WAL wal, FileSystem fs, Configuration confParam,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        HRegionInfo regionInfo, HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      super(tableDir, wal, fs, confParam, regionInfo, htd, rsServices);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    public HeartbeatHRegion(HRegionFileSystem fs, WAL wal, Configuration confParam,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        HTableDescriptor htd, RegionServerServices rsServices) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      super(fs, wal, confParam, htd, rsServices);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    private static void columnFamilySleep() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (HeartbeatHRegion.sleepBetweenColumnFamilies) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        try {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          Thread.sleep(HeartbeatHRegion.columnFamilySleepTime);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        } catch (InterruptedException e) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    private static void rowSleep() {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (HeartbeatHRegion.sleepBetweenRows) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          Thread.sleep(HeartbeatHRegion.rowSleepTime);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      } catch (InterruptedException e) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // Instantiate the custom heartbeat region scanners<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        List&lt;KeyValueScanner&gt; additionalScanners, boolean copyCells) throws IOException {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      if (scan.isReversed()) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (scan.getFilter() != null) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          scan.getFilter().setReversed(true);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        return new HeartbeatReversedRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return new HeartbeatRegionScanner(scan, additionalScanners, this, copyCells);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Custom ReversedRegionScanner that can be configured to sleep between retrievals of row Results<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * and/or column family cells<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private static class HeartbeatReversedRegionScanner extends ReversedRegionScannerImpl {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    HeartbeatReversedRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        HRegion region, boolean copyCells) throws IOException {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      super(scan, additionalScanners, region, copyCells);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      HeartbeatHRegion.rowSleep();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      return moreRows;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.storeHeap = new HeartbeatReversedKVHeap(scanners, region.getCellCompartor());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!joinedScanners.isEmpty()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.joinedHeap = new HeartbeatReversedKVHeap(joinedScanners, region.getCellCompartor());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  /**<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * Custom RegionScanner that can be configured to sleep between retrievals of row Results and/or<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * column family cells<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  private static class HeartbeatRegionScanner extends RegionScannerImpl {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    HeartbeatRegionScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        boolean copyCells) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      region.super(scan, additionalScanners, region, copyCells);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext context)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean moreRows = super.nextRaw(outResults, context);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      HeartbeatHRegion.rowSleep();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return moreRows;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>    @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region) throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      this.storeHeap = new HeartbeatKVHeap(scanners, region.getCellCompartor());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (!joinedScanners.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.joinedHeap = new HeartbeatKVHeap(joinedScanners, region.getCellCompartor());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  /**<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * Custom KV Heap that can be configured to sleep/wait in between retrievals of column family<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * cells. Useful for testing<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private static final class HeartbeatKVHeap extends KeyValueHeap {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    public HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, CellComparator comparator)<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      super(scanners, comparator);<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>    HeartbeatKVHeap(List&lt;? extends KeyValueScanner&gt; scanners, KVScannerComparator comparator)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        throws IOException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      super(scanners, comparator);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    @Override<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext context)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      boolean moreRows = super.next(result, context);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      if (!HeartbeatHRegion.sleepBeforeColumnFamily) HeartbeatHRegion.columnFamilySleep();<a name="line.515"></a>
+<span class="sourceLineNo">388</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = cfSleepTime &gt; 0;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    HeartbeatHRegion.columnFamilySleepTime = cfSleepTime;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    HeartbeatHRegion.sleepBeforeColumnFamily = sleepBeforeCf;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * Disable the sleeping mechanism server side.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private static void disableSleeping() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    HeartbeatHRegion.sleepBetweenRows = false;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    HeartbeatHRegion.sleepBetweenColumnFamilies = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * Custom HRegionServer instance that instantiates {@link HeartbeatRPCServices} in place of<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * {@link RSRpcServices} to allow us to toggle support for heartbeat messages<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private static class HeartbeatHRegionServer extends HRegionServer {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public HeartbeatHRegionServer(Configuration conf) throws IOException, InterruptedException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super(conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    public HeartbeatHRegionServer(Configuration conf, CoordinatedStateManager csm)<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      super(conf, csm);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    protected RSRpcServices createRpcServices() throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return new HeartbeatRPCServices(this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * Custom RSRpcServices instance that allows heartbeat support to be toggled<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private static class HeartbeatRPCServices extends RSRpcServices {<a name="line.424"></a>
+<sp

<TRUNCATED>

[49/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 5c75afb..3323ac7 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2016 The Apache Software Foundation</copyright>
     <item>
       <title>File: 1695,
-             Errors: 12630,
+             Errors: 12629,
              Warnings: 0,
              Infos: 0
       </title>
@@ -15119,7 +15119,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  209
+                  208
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index c370e64..41e04ea 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -331,7 +331,7 @@ For flagrant violations requiring a firm response the PMC may opt to skip early
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index 08d1e0b..6321f1b 100644
--- a/cygwin.html
+++ b/cygwin.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -673,7 +673,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 435d5b7..4e24541 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -518,7 +518,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index e4e6aaf..d2e6bae 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1648,7 +1648,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 573c70a..c2e4ebe 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -312,7 +312,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 7d35a27..9c7f4ca 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -786,7 +786,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 2fc7d8c..18e947f 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -46142,6 +46142,8 @@
 <dd>
 <div class="block">Checks whether the block cache is enabled.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#isBootstrapNamespace()">isBootstrapNamespace()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">CreateNamespaceProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/decode/PrefixTreeArrayScanner.html#isBranch()">isBranch()</a></span> - Method in class org.apache.hadoop.hbase.codec.prefixtree.decode.<a href="./org/apache/hadoop/hbase/codec/prefixtree/decode/PrefixTreeArrayScanner.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.decode">PrefixTreeArrayScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/decode/row/RowNodeReader.html#isBranch()">isBranch()</a></span> - Method in class org.apache.hadoop.hbase.codec.prefixtree.decode.row.<a href="./org/apache/hadoop/hbase/codec/prefixtree/decode/row/RowNodeReader.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.decode.row">RowNodeReader</a></dt>
@@ -80553,6 +80555,17 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.html#shouldUseThisHostnameInstead()">shouldUseThisHostnameInstead()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">CreateNamespaceProcedure</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">CreateTableProcedure</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashProcedure</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck(TEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
+<dd>
+<div class="block">By default, the executor will keep the procedure result around util
+ the eviction TTL is expired.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.html#shouldWriteBlock(boolean)">shouldWriteBlock(boolean)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.html" title="class in org.apache.hadoop.hbase.io.hfile">CompoundBloomFilterWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.BlockIndexWriter.html#shouldWriteBlock(boolean)">shouldWriteBlock(boolean)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.BlockIndexWriter.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlockIndex.BlockIndexWriter</a></dt>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/client/ClientScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ClientScanner.html b/devapidocs/org/apache/hadoop/hbase/client/ClientScanner.html
index efde060..971af2b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ClientScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ClientScanner.html
@@ -991,7 +991,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>doneWithRegion</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.539">doneWithRegion</a>(long&nbsp;remainingResultSize,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.534">doneWithRegion</a>(long&nbsp;remainingResultSize,
                      int&nbsp;remainingRows,
                      boolean&nbsp;regionHasMoreResults)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>remainingResultSize</code> - </dd><dd><code>remainingRows</code> - </dd><dd><code>regionHasMoreResults</code> - </dd>
@@ -1005,7 +1005,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>calcEstimatedSize</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.544">calcEstimatedSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;rs)</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.539">calcEstimatedSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;rs)</pre>
 </li>
 </ul>
 <a name="addEstimatedSize(long)">
@@ -1014,7 +1014,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>addEstimatedSize</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.553">addEstimatedSize</a>(long&nbsp;estimatedHeapSizeOfResult)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.548">addEstimatedSize</a>(long&nbsp;estimatedHeapSizeOfResult)</pre>
 </li>
 </ul>
 <a name="getCacheCount()">
@@ -1023,7 +1023,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.558">getCacheCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.553">getCacheCount</a>()</pre>
 </li>
 </ul>
 <a name="getResultsToAddToCache(org.apache.hadoop.hbase.client.Result[], boolean)">
@@ -1032,7 +1032,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultsToAddToCache</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.576">getResultsToAddToCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;resultsFromServer,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.571">getResultsToAddToCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;resultsFromServer,
                                   boolean&nbsp;heartbeatMessage)
                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This method ensures all of our book keeping regarding partial results is kept up to date. This
@@ -1054,7 +1054,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>addToPartialResults</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.696">addToPartialResults</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.691">addToPartialResults</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">A convenience method for adding a Result to our list of partials. This method ensure that only
  Results that belong to the same row as the other partials can be added to the list.</div>
@@ -1069,7 +1069,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>clearPartialResults</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.710">clearPartialResults</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.705">clearPartialResults</a>()</pre>
 <div class="block">Convenience method for clearing the list of partials and resetting the partialResultsRow.</div>
 </li>
 </ul>
@@ -1079,7 +1079,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>addResultsToList</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.722">addResultsToList</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;outputList,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.717">addResultsToList</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;outputList,
                     <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;inputArray,
                     int&nbsp;start,
                     int&nbsp;end)</pre>
@@ -1093,7 +1093,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.731">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.726">close</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html#close()">ResultScanner</a></code></strong></div>
 <div class="block">Closes the scanner and releases any resources it has allocated</div>
 </li>
@@ -1104,7 +1104,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockList">
 <li class="blockList">
 <h4>createClosestRowBefore</h4>
-<pre>protected static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.758">createClosestRowBefore</a>(byte[]&nbsp;row)</pre>
+<pre>protected static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.753">createClosestRowBefore</a>(byte[]&nbsp;row)</pre>
 <div class="block">Create the closest row before the specified row</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>row</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>a new byte array which is the closest front row of the specified one</dd></dl>
@@ -1116,7 +1116,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCal
 <ul class="blockListLast">
 <li class="blockList">
 <h4>renewLease</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.776">renewLease</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ClientScanner.html#line.771">renewLease</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html#renewLease()">ResultScanner</a></code></strong></div>
 <div class="block">Allow the client to renew the scanner's lease on the server.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the lease was successfully renewed, false otherwise.</dd></dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index ab5aca8..1c756df 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -395,13 +395,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">IsolationLevel</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.MasterSwitchType</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 28dd2b0..d58b0ce 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -161,13 +161,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">Filter.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">CompareFilter.CompareOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.SatisfiesCode</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 02aa3a0..e420907 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -271,12 +271,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">Cacheable.MemoryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">CacheConfig.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType.BlockCategory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">HFileBlock.Writer.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index ab31455..a8ea334 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -268,8 +268,8 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">CellCounter.CellCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">TableSplit.Version</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 9548d85..3a094f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -176,8 +176,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="strong">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/FavoredNodesPlan.Position.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="strong">FavoredNodesPlan.Position</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="strong">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index d9039e7..9ad4972 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -318,9 +318,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.TerminationStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.html
index a6c7b1a..bf291d3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.html
@@ -383,7 +383,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">


[37/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 10be916..701ae83 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
@@ -173,1145 +173,1147 @@
 <span class="sourceLineNo">165</span>      final long evictTtl = conf.getInt(EVICT_TTL_CONF_KEY, DEFAULT_EVICT_TTL);<a name="line.165"></a>
 <span class="sourceLineNo">166</span>      final long evictAckTtl = conf.getInt(EVICT_ACKED_TTL_CONF_KEY, DEFAULT_ACKED_EVICT_TTL);<a name="line.166"></a>
 <span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        ProcedureInfo result = entry.getValue();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>        // TODO: Select TTL based on Procedure type<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        if ((result.hasClientAckTime() &amp;&amp; (now - result.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.175"></a>
-<span class="sourceLineNo">176</span>            (now - result.getLastUpdate()) &gt;= evictTtl) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          if (LOG.isDebugEnabled()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>            LOG.debug("Evict completed procedure " + entry.getKey());<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          store.delete(entry.getKey());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          it.remove();<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>          NonceKey nonceKey = result.getNonceKey();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          if (nonceKey != null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            nonceKeysToProcIdsMap.remove(nonceKey);<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>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>    @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      throw new UnsupportedOperationException();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    protected void rollback(final TEnvironment env) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throw new UnsupportedOperationException();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected boolean abort(final TEnvironment env) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      throw new UnsupportedOperationException();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    public void serializeStateData(final OutputStream stream) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public void deserializeStateData(final InputStream stream) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      throw new UnsupportedOperationException();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * This map contains every root procedure.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * or periodic procedures.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Queue that contains runnable procedures.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  private final ProcedureRunnableSet runnables;<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>  // TODO<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private final TEnvironment environment;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private final ProcedureStore store;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private final Configuration conf;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private Thread[] threads;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final ProcedureStore store) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    this.environment = environment;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    this.runnables = runqueue;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    this.store = store;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.conf = conf;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      public void setMaxProcId(long maxProcId) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        lastProcId.set(maxProcId);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>      @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        int corruptedCount = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        while (procIter.hasNext()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          LOG.error("corrupted procedure: " + proc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          corruptedCount++;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    });<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      final boolean abortOnCorruption) throws IOException {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // 1. Build the rollback stack<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    int runnablesCount = 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    while (procIter.hasNext()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      final NonceKey nonceKey;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      final long procId;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>      if (procIter.isNextCompleted()) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        nonceKey = proc.getNonceKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        procId = proc.getProcId();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        completed.put(proc.getProcId(), proc);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        if (isDebugEnabled) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      } else {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        nonceKey = proc.getNonceKey();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        procId = proc.getProcId();<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>        if (!proc.hasParent()) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>        // add the procedure to the map<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        proc.beforeReplay(getEnvironment());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        procedures.put(proc.getProcId(), proc);<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          runnablesCount++;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>      // add the nonce to the map<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      if (nonceKey != null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // 2. Initialize the stacks<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    procIter.reset();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    while (procIter.hasNext()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      if (procIter.isNextCompleted()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        procIter.skipNext();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        continue;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (isDebugEnabled) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                    proc.getState(), proc.hasException(), proc));<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>      Long rootProcId = getRootProcedureId(proc);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (rootProcId == null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        runnables.addBack(proc);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        continue;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (proc.hasParent() &amp;&amp; !proc.isFinished()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        Procedure parent = procedures.get(proc.getParentProcId());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        // corrupted procedures are handled later at step 3<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        if (parent != null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          parent.incChildrenLatch();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>      RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      procStack.loadStack(proc);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      switch (proc.getState()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        case RUNNABLE:<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          runnableList.add(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          break;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        case WAITING_TIMEOUT:<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          if (waitingSet == null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>            waitingSet = new HashSet&lt;Procedure&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          waitingSet.add(proc);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        case FINISHED:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (proc.hasException()) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // add the proc to the runnables to perform the rollback<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            runnables.addBack(proc);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            break;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        case ROLLEDBACK:<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        case INITIALIZING:<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          LOG.error(msg);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          throw new UnsupportedOperationException(msg);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        default:<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          break;<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><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    // 3. Validate the stacks<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    int corruptedCount = 0;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    while (itStack.hasNext()) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      RootProcedureState procStack = entry.getValue();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if (procStack.isValid()) continue;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>      for (Procedure proc: procStack.getSubprocedures()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        LOG.error("corrupted procedure: " + proc);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        procedures.remove(proc.getProcId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        runnableList.remove(proc);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        corruptedCount++;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      itStack.remove();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // 4. Push the runnables<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (!runnableList.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // some procedure may be started way before this stuff.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Procedure proc = runnableList.get(i);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        if (!proc.hasParent()) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        if (proc.wasExecuted()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          runnables.addFront(proc);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        } else {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          // if it was not in execution, it can wait.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          runnables.addBack(proc);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * Start the procedure executor.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   *<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param numThreads number of threads available for procedure execution.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   */<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (running.getAndSet(true)) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      LOG.warn("Already running");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    // procedures and triggering periodic procedures.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    threads = new Thread[numThreads + 1];<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    LOG.info("Starting procedure executor threads=" + threads.length);<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    // Initialize procedures executor<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; numThreads; ++i) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      threads[i] = new Thread("ProcedureExecutor-" + i) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        public void run() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          execLoop();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      };<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Initialize procedures timeout handler (this is the +1 thread)<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    threads[numThreads] = new Thread("ProcedureExecutorTimeoutThread") {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      public void run() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        timeoutLoop();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    };<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // Acquire the store lease.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    store.recoverLease();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    load(abortOnCorruption);<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      threads[i].start();<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>    // Add completed cleaner<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    waitingTimeout.add(<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>  public void stop() {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (!running.getAndSet(false)) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    LOG.info("Stopping the procedure executor");<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    runnables.signalAll();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    waitingTimeout.signalAll();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  public void join() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    boolean interrupted = false;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        threads[i].join();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } catch (InterruptedException ex) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        interrupted = true;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    if (interrupted) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      Thread.currentThread().interrupt();<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    completed.clear();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    rollbackStack.clear();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    procedures.clear();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    nonceKeysToProcIdsMap.clear();<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    waitingTimeout.clear();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    runnables.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    lastProcId.set(-1);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  public boolean isRunning() {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    return running.get();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @return the number of execution threads.<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   */<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  public int getNumThreads() {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    return threads == null ? 0 : (threads.length - 1);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  public int getActiveExecutorCount() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return activeExecutorCount.get();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  public TEnvironment getEnvironment() {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    return this.environment;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public ProcedureStore getStore() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return this.store;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public void registerListener(ProcedureExecutorListener listener) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.listeners.add(listener);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>  public boolean unregisterListener(ProcedureExecutorListener listener) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return this.listeners.remove(listener);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * List procedures.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @return the procedures in a list<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  public List&lt;ProcedureInfo&gt; listProcedures() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    List&lt;ProcedureInfo&gt; procedureLists =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        new ArrayList&lt;ProcedureInfo&gt;(procedures.size() + completed.size());<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    for (java.util.Map.Entry&lt;Long, Procedure&gt; p: procedures.entrySet()) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      procedureLists.add(Procedure.createProcedureInfo(p.getValue(), null));<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    for (java.util.Map.Entry&lt;Long, ProcedureInfo&gt; e: completed.entrySet()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      // Note: The procedure could show up twice in the list with different state, as<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      // it could complete after we walk through procedures list and insert into<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      // procedureList - it is ok, as we will use the information in the ProcedureInfo<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      // to figure it out; to prevent this would increase the complexity of the logic.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      procedureLists.add(e.getValue());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return procedureLists;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * Add a new root-procedure to the executor.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param proc the new procedure to execute.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public long submitProcedure(final Procedure proc) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return submitProcedure(proc, HConstants.NO_NONCE, HConstants.NO_NONCE);<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>  /**<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Add a new root-procedure to the executor.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param proc the new procedure to execute.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param nonceGroup<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @param nonce<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   */<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  public long submitProcedure(<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Procedure proc,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      final long nonceGroup,<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      final long nonce) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    Preconditions.checkArgument(isRunning());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    Preconditions.checkArgument(!proc.hasParent());<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>    Long currentProcId;<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span>    // The following part of the code has to be synchronized to prevent multiple request<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    // with the same nonce to execute at the same time.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    synchronized (this) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Check whether the proc exists.  If exist, just return the proc id.<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // This is to prevent the same proc to submit multiple times (it could happen<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      // when client could not talk to server and resubmit the same request).<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      NonceKey noncekey = null;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      if (nonce != HConstants.NO_NONCE) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        noncekey = new NonceKey(nonceGroup, nonce);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        currentProcId = nonceKeysToProcIdsMap.get(noncekey);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        if (currentProcId != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // Found the proc<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return currentProcId;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>      // Initialize the Procedure ID<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      currentProcId = nextProcId();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      proc.setProcId(currentProcId);<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // This is new procedure. Set the noncekey and insert into the map.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      if (noncekey != null) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        proc.setNonceKey(noncekey);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        nonceKeysToProcIdsMap.put(noncekey, currentProcId);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    } // end of synchronized (this)<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    // Commit the transaction<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    store.insert(proc, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    if (LOG.isDebugEnabled()) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      LOG.debug("Procedure " + proc + " added to the store.");<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>    // Create the rollback stack for the procedure<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    RootProcedureState stack = new RootProcedureState();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    rollbackStack.put(currentProcId, stack);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    // Submit the new subprocedures<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    assert !procedures.containsKey(currentProcId);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    procedures.put(currentProcId, proc);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    sendProcedureAddedNotification(currentProcId);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    runnables.addBack(proc);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    return currentProcId;<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>  public ProcedureInfo getResult(final long procId) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return completed.get(procId);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Return true if the procedure is finished.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * The state may be "completed successfully" or "failed and rolledback".<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Use getResult() to check the state or get the result data.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param procId the ID of the procedure to check<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return true if the procedure execution is finished, otherwise false.<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   */<a name="line.694"></a>
-<span class="sourceLineNo">695</span>  public boolean isFinished(final long procId) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    return completed.containsKey(procId);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>  /**<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * Return true if the procedure is started.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * @param procId the ID of the procedure to check<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * @return true if the procedure execution is started, otherwise false.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>  public boolean isStarted(final long procId) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    Procedure proc = procedures.get(procId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    if (proc == null) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      return completed.get(procId) != null;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    return proc.wasExecuted();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>  }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>  /**<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * Mark the specified completed procedure, as ready to remove.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param procId the ID of the procedure to remove<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public void removeResult(final long procId) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    ProcedureInfo result = completed.get(procId);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    if (result == null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      assert !procedures.containsKey(procId) : "procId=" + procId + " is still running";<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (LOG.isDebugEnabled()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        LOG.debug("Procedure procId=" + procId + " already removed by the cleaner.");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span>    // The CompletedProcedureCleaner will take care of deletion, once the TTL is expired.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    result.setClientAckTime(EnvironmentEdgeManager.currentTime());<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Send an abort notification the specified procedure.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * @param procId the procedure to abort<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   */<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public boolean abort(final long procId) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return abort(procId, true);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Send an abort notification the specified procedure.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param procId the procedure to abort<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    Procedure proc = procedures.get(procId);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (proc != null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return false;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      } else {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        return proc.abort(getEnvironment());<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    return false;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span>  /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Check if the user is this procedure's owner<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * @param procId the target procedure<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param user the user<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @return true if the user is the owner of the procedure,<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   *   false otherwise or the owner is unknown.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public boolean isProcedureOwner(final long procId, final User user) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    if (user == null) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      return false;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    Procedure proc = procedures.get(procId);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    if (proc != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return proc.getOwner().equals(user.getShortName());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    ProcedureInfo procInfo = completed.get(procId);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (procInfo == null) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      // Procedure either does not exist or has already completed and got cleaned up.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // At this time, we cannot check the owner of the procedure<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      return false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    return ProcedureInfo.isProcedureOwner(procInfo, user);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  public Map&lt;Long, ProcedureInfo&gt; getResults() {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    return Collections.unmodifiableMap(completed);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>  public Procedure getProcedure(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    return procedures.get(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  }<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>  protected ProcedureRunnableSet getRunnableSet() {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    return runnables;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  /**<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * Execution loop (N threads)<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * while the executor is in a running state,<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * fetch a procedure from the runnables queue and start the execution.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  private void execLoop() {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      Procedure proc = runnables.poll();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      if (proc == null) continue;<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>      try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        activeExecutorCount.incrementAndGet();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        execLoop(proc);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      } finally {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        activeExecutorCount.decrementAndGet();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  private void execLoop(Procedure proc) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (LOG.isTraceEnabled()) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      LOG.trace("Trying to start the execution of " + proc);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>    Long rootProcId = getRootProcedureId(proc);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    if (rootProcId == null) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      // The 'proc' was ready to run but the root procedure was rolledback<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      executeRollback(proc);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    if (procStack == null) return;<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>    do {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      // Try to acquire the execution<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      if (!procStack.acquire(proc)) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        if (procStack.setRollback()) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          // we have the 'rollback-lock' we can start rollingback<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (!executeRollback(rootProcId, procStack)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            procStack.unsetRollback();<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            runnables.yield(proc);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        } else {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          // if we can't rollback means that some child is still running.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          // the rollback will be executed after all the children are done.<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // If the procedure was never executed, remove and mark it as rolledback.<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          if (!proc.wasExecuted()) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            if (!executeRollback(proc)) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>              runnables.yield(proc);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        break;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>      // Execute the procedure<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      assert proc.getState() == ProcedureState.RUNNABLE;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      if (proc.acquireLock(getEnvironment())) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        execProcedure(procStack, proc);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        proc.releaseLock(getEnvironment());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      } else {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        runnables.yield(proc);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      procStack.release(proc);<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span>      // allows to kill the executor before something is stored to the wal.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>      // useful to test the procedure recovery.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      if (testing != null &amp;&amp; !isRunning()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        break;<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
-<span class="sourceLineNo">867</span><a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (proc.isSuccess()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        if (LOG.isDebugEnabled()) {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          LOG.debug("Procedure completed in " +<a name="line.870"></a>
-<span class="sourceLineNo">871</span>              StringUtils.humanTimeDiff(proc.elapsedTime()) + ": " + proc);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>        }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        // Finalize the procedure state<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        if (proc.getProcId() == rootProcId) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          procedureFinished(proc);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        break;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      if (proc.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        runnables.yield(proc);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        break;<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    } while (procStack.isFailed());<a name="line.885"></a>
-<span class="sourceLineNo">886</span>  }<a name="line.886"></a>
+<span class="sourceLineNo">168</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      final Iterator&lt;Map.Entry&lt;Long, ProcedureInfo&gt;&gt; it = completed.entrySet().iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      while (it.hasNext() &amp;&amp; store.isRunning()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        final Map.Entry&lt;Long, ProcedureInfo&gt; entry = it.next();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        final ProcedureInfo procInfo = entry.getValue();<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>        // TODO: Select TTL based on Procedure type<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        if ((procInfo.hasClientAckTime() &amp;&amp; (now - procInfo.getClientAckTime()) &gt;= evictAckTtl) ||<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            (now - procInfo.getLastUpdate()) &gt;= evictTtl) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          if (isDebugEnabled) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>            LOG.debug("Evict completed procedure: " + procInfo);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          store.delete(entry.getKey());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          it.remove();<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>          NonceKey nonceKey = procInfo.getNonceKey();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          if (nonceKey != null) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    protected Procedure[] execute(final TEnvironment env) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new UnsupportedOperationException();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    protected void rollback(final TEnvironment env) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throw new UnsupportedOperationException();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    protected boolean abort(final TEnvironment env) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      throw new UnsupportedOperationException();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>    @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public void serializeStateData(final OutputStream stream) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throw new UnsupportedOperationException();<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>    @Override<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    public void deserializeStateData(final InputStream stream) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      throw new UnsupportedOperationException();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the ProcedureInfo.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Once a Root-Procedure completes (success or failure), the result will be added to this map.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * The user of ProcedureExecutor should call getResult(procId) to get the result.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private final ConcurrentHashMap&lt;Long, ProcedureInfo&gt; completed =<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    new ConcurrentHashMap&lt;Long, ProcedureInfo&gt;();<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Map the the procId returned by submitProcedure(), the Root-ProcID, to the RootProcedureState.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * The RootProcedureState contains the execution stack of the Root-Procedure,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * It is added to the map by submitProcedure() and removed on procedure completion.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private final ConcurrentHashMap&lt;Long, RootProcedureState&gt; rollbackStack =<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    new ConcurrentHashMap&lt;Long, RootProcedureState&gt;();<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>   * Helper map to lookup the live procedures by ID.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * This map contains every procedure. root-procedures and subprocedures.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  private final ConcurrentHashMap&lt;Long, Procedure&gt; procedures =<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    new ConcurrentHashMap&lt;Long, Procedure&gt;();<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * Helper map to lookup whether the procedure already issued from the same client.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * This map contains every root procedure.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  private ConcurrentHashMap&lt;NonceKey, Long&gt; nonceKeysToProcIdsMap =<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      new ConcurrentHashMap&lt;NonceKey, Long&gt;();<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Timeout Queue that contains Procedures in a WAITING_TIMEOUT state<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * or periodic procedures.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private final TimeoutBlockingQueue&lt;Procedure&gt; waitingTimeout =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    new TimeoutBlockingQueue&lt;Procedure&gt;(new ProcedureTimeoutRetriever());<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>   * Queue that contains runnable procedures.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private final ProcedureRunnableSet runnables;<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  // TODO<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private final ReentrantLock submitLock = new ReentrantLock();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  private final AtomicLong lastProcId = new AtomicLong(-1);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private final CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt; listeners =<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    new CopyOnWriteArrayList&lt;ProcedureExecutorListener&gt;();<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private final AtomicInteger activeExecutorCount = new AtomicInteger(0);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private final AtomicBoolean running = new AtomicBoolean(false);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  private final TEnvironment environment;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  private final ProcedureStore store;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private final Configuration conf;<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private Thread[] threads;<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      final ProcedureStore store) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this(conf, environment, store, new ProcedureSimpleRunQueue());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  public ProcedureExecutor(final Configuration conf, final TEnvironment environment,<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      final ProcedureStore store, final ProcedureRunnableSet runqueue) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    this.environment = environment;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    this.runnables = runqueue;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    this.store = store;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.conf = conf;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  private void load(final boolean abortOnCorruption) throws IOException {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    Preconditions.checkArgument(completed.isEmpty());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    Preconditions.checkArgument(rollbackStack.isEmpty());<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Preconditions.checkArgument(procedures.isEmpty());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Preconditions.checkArgument(waitingTimeout.isEmpty());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    Preconditions.checkArgument(runnables.size() == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    store.load(new ProcedureStore.ProcedureLoader() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      public void setMaxProcId(long maxProcId) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        assert lastProcId.get() &lt; 0 : "expected only one call to setMaxProcId()";<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        LOG.debug("load procedures maxProcId=" + maxProcId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        lastProcId.set(maxProcId);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>      @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        loadProcedures(procIter, abortOnCorruption);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        int corruptedCount = 0;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        while (procIter.hasNext()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          LOG.error("corrupted procedure: " + proc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          corruptedCount++;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    });<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void loadProcedures(final ProcedureIterator procIter,<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      final boolean abortOnCorruption) throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final boolean isDebugEnabled = LOG.isDebugEnabled();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    // 1. Build the rollback stack<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    int runnablesCount = 0;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    while (procIter.hasNext()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      final NonceKey nonceKey;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      final long procId;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      if (procIter.isNextCompleted()) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        nonceKey = proc.getNonceKey();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        procId = proc.getProcId();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        completed.put(proc.getProcId(), proc);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (isDebugEnabled) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          LOG.debug("The procedure is completed: " + proc);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      } else {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Procedure proc = procIter.nextAsProcedure();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        nonceKey = proc.getNonceKey();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        procId = proc.getProcId();<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>        if (!proc.hasParent()) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>          assert !proc.isFinished() : "unexpected finished procedure";<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          rollbackStack.put(proc.getProcId(), new RootProcedureState());<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // add the procedure to the map<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        proc.beforeReplay(getEnvironment());<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        procedures.put(proc.getProcId(), proc);<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>        if (proc.getState() == ProcedureState.RUNNABLE) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          runnablesCount++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      // add the nonce to the map<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      if (nonceKey != null) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        nonceKeysToProcIdsMap.put(nonceKey, procId);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // 2. Initialize the stacks<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    ArrayList&lt;Procedure&gt; runnableList = new ArrayList(runnablesCount);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    procIter.reset();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    while (procIter.hasNext()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (procIter.isNextCompleted()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        procIter.skipNext();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        continue;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>      Procedure proc = procIter.nextAsProcedure();<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      assert !(proc.isFinished() &amp;&amp; !proc.hasParent()) : "unexpected completed proc=" + proc;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (isDebugEnabled) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        LOG.debug(String.format("Loading procedure state=%s isFailed=%s: %s",<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                    proc.getState

<TRUNCATED>

[09/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
index 79aa3db..3cbc9f0 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html
@@ -27,264 +27,368 @@
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileSystem;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.After;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.junit.Before;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.Test;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.experimental.categories.Category;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import static org.junit.Assert.assertEquals;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import static org.junit.Assert.assertTrue;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>@Category({MasterTests.class, SmallTests.class})<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TestYieldProcedures {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Procedure NULL_PROC = null;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private ProcedureStore procStore;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private HBaseCommonTestingUtility htu;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private FileSystem fs;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private Path testDir;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private Path logDir;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @Before<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public void setUp() throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    htu = new HBaseCommonTestingUtility();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    testDir = htu.getDataTestDir();<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    logDir = new Path(testDir, "proc-logs");<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(), procStore);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @After<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public void tearDown() throws IOException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    procExecutor.stop();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    procStore.stop(false);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    fs.delete(logDir, 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>  @Test<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    final int NUM_STATES = 3;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      procExecutor.submitProcedure(procs[i]);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // verify yield during execute()<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    long prevTimestamp = 0;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(execStep);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        assertEquals(false, info.isRollback());<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        prevTimestamp++;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      }<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>    // verify yield during rollback()<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    int count = NUM_STATES;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(count);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        LOG.info("i=" + i + " execStep=" + execStep + " timestamp=" + info.getTimestamp());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        assertEquals(true, info.isRollback());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        assertEquals(prevTimestamp + 1, info.getTimestamp());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        prevTimestamp++;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      count++;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final int NUM_STATES = 3;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.126"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Before;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertEquals;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import static org.junit.Assert.assertTrue;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, SmallTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestYieldProcedures {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Procedure NULL_PROC = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TestRunQueue procRunnables;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private ProcedureStore procStore;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private HBaseCommonTestingUtility htu;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileSystem fs;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Path testDir;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Path logDir;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Before<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setUp() throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htu = new HBaseCommonTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    testDir = htu.getDataTestDir();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    logDir = new Path(testDir, "proc-logs");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    procRunnables = new TestRunQueue();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        procStore, procRunnables);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @After<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void tearDown() throws IOException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    procExecutor.stop();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    procStore.stop(false);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fs.delete(logDir, true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    final int NUM_STATES = 3;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      procExecutor.submitProcedure(procs[i]);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // verify execution<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int index = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(false, info.isRollback());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      // verify rollback<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertEquals(true, info.isRollback());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // check runnable queue stats<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, procRunnables.size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertEquals(18, procRunnables.addBackCalls);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(15, procRunnables.yieldCalls);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertEquals(19, procRunnables.pollCalls);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(3, procRunnables.completionCalls);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final int NUM_STATES = 3;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    int count = 0;<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      assertEquals(false, info.isRollback());<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      assertEquals(i, info.getStep().ordinal());<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>      info = proc.getExecutionInfo().get(count++);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      assertEquals(false, info.isRollback());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      assertEquals(i, info.getStep().ordinal());<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(true, info.isRollback());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      assertEquals(i, info.getStep().ordinal());<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>      info = proc.getExecutionInfo().get(count++);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      assertEquals(true, info.isRollback());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      assertEquals(i, info.getStep().ordinal());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private static class TestProcEnv {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public long nextTimestamp() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return timestamp.incrementAndGet();<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><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public static class TestStateMachineProcedure<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    public class ExecutionInfo {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      private final boolean rollback;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      private final long timestamp;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      private final State step;<a name="line.167"></a>
+<span class="sourceLineNo">128</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertEquals(false, info.isRollback());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      assertEquals(i, info.getStep().ordinal());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      info = proc.getExecutionInfo().get(count++);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      assertEquals(false, info.isRollback());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      assertEquals(i, info.getStep().ordinal());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(true, info.isRollback());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      assertEquals(i, info.getStep().ordinal());<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>      info = proc.getExecutionInfo().get(count++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertEquals(true, info.isRollback());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(i, info.getStep().ordinal());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // check runnable queue stats<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertEquals(0, procRunnables.size());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(12, procRunnables.addBackCalls);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertEquals(11, procRunnables.yieldCalls);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertEquals(13, procRunnables.pollCalls);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public void testYieldException() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    TestYieldProcedure proc = new TestYieldProcedure();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertEquals(6, proc.step);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        this.timestamp = timestamp;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        this.step = step;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        this.rollback = isRollback;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>      public State getStep() { return step; }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      public long getTimestamp() { return timestamp; }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      public boolean isRollback() { return rollback; }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    private final boolean abortOnFinalStep;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    public TestStateMachineProcedure() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      this(false, false);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">169</span>    // check runnable queue stats<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(0, procRunnables.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(6, procRunnables.addBackCalls);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(5, procRunnables.yieldCalls);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    assertEquals(7, procRunnables.pollCalls);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static class TestProcEnv {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    public long nextTimestamp() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return timestamp.incrementAndGet();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public static class TestStateMachineProcedure<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public class ExecutionInfo {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      private final boolean rollback;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      private final long timestamp;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      private final State step;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return executionInfo;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        throws InterruptedException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      LOG.info("execute step " + state);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, false));<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      Thread.sleep(150);<a name="line.204"></a>
+<span class="sourceLineNo">195</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        this.timestamp = timestamp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        this.step = step;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.rollback = isRollback;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      public State getStep() { return step; }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      public long getTimestamp() { return timestamp; }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public boolean isRollback() { return rollback; }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
 <span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.debug("THROW INTERRUPT");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new InterruptedException("test interrupt");<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">206</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    private final boolean abortOnFinalStep;<a name="line.209"></a>
 <span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>      switch (state) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        case STATE_1:<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          setNextState(State.STATE_2);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          break;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        case STATE_2:<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          setNextState(State.STATE_3);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          break;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        case STATE_3:<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          if (abortOnFinalStep) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          return Flow.NO_MORE_STATE;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        default:<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          throw new UnsupportedOperationException();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      return Flow.HAS_MORE_STATE;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        throws InterruptedException {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      LOG.debug("rollback state " + state);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      executionInfo.add(new ExecutionInfo(env.nextTimestamp(), state, true));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      Thread.sleep(150);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        LOG.debug("THROW INTERRUPT");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throw new InterruptedException("test interrupt");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      switch (state) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        case STATE_1:<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        case STATE_2:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          break;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case STATE_3:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        default:<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          throw new UnsupportedOperationException();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected State getState(final int stateId) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return State.values()[stateId];<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    protected int getStateId(final State state) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      return state.ordinal();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    protected State getInitialState() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return State.STATE_1;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return true;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    protected boolean abort(TestProcEnv env) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      aborted.set(true);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>}<a name="line.279"></a>
+<span class="sourceLineNo">211</span>    public TestStateMachineProcedure() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      this(false, false);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return executionInfo;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        throws InterruptedException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final long ts = env.nextTimestamp();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info(getProcId() + " execute step " + state + " ts=" + ts);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      executionInfo.add(new ExecutionInfo(ts, state, false));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Thread.sleep(150);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.debug("THROW INTERRUPT");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        throw new InterruptedException("test interrupt");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      switch (state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        case STATE_1:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          setNextState(State.STATE_2);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          break;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        case STATE_2:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          setNextState(State.STATE_3);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          break;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        case STATE_3:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          if (abortOnFinalStep) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          return Flow.NO_MORE_STATE;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        default:<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          throw new UnsupportedOperationException();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return Flow.HAS_MORE_STATE;<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>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throws InterruptedException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      final long ts = env.nextTimestamp();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      LOG.debug(getProcId() + " rollback state " + state + " ts=" + ts);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      executionInfo.add(new ExecutionInfo(ts, state, true));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Thread.sleep(150);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("THROW INTERRUPT");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        throw new InterruptedException("test interrupt");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      switch (state) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        case STATE_1:<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          break;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        case STATE_2:<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          break;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        case STATE_3:<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          break;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        default:<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          throw new UnsupportedOperationException();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    protected State getState(final int stateId) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return State.values()[stateId];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    protected int getStateId(final State state) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return state.ordinal();<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>    @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    protected State getInitialState() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return State.STATE_1;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return true;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    protected boolean abort(TestProcEnv env) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      aborted.set(true);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static class TestYieldProcedure extends Procedure&lt;TestProcEnv&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private int step = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public TestYieldProcedure() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>    @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    protected Procedure[] execute(final TestProcEnv env) throws ProcedureYieldException {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.info("execute step " + step);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (step++ &lt; 5) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        throw new ProcedureYieldException();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return null;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected void rollback(TestProcEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected boolean abort(TestProcEnv env) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    protected boolean isYieldAfterExecutionStep(final TestProcEnv env) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return true;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    protected void serializeStateData(final OutputStream stream) throws IOException {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    @Override<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    protected void deserializeStateData(final InputStream stream) throws IOException {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private static class TestRunQueue extends ProcedureSimpleRunQueue {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    private int completionCalls;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    private int addFrontCalls;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    private int addBackCalls;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private int yieldCalls;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private int pollCalls;<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public TestRunQueue() {}<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public void addFront(final Procedure proc) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        addFrontCalls++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        super.addFront(proc);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      public void addBack(final Procedure proc) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        addBackCalls++;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        super.addBack(proc);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>      @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      public void yield(final Procedure proc) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        yieldCalls++;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        super.yield(proc);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      public Procedure poll() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        pollCalls++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return super.poll();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      public void completionCleanup(Procedure proc) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        completionCalls++;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>}<a name="line.383"></a>
 
 
 


[51/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
Published site at f6945c4631e7697976fd8c2272f8152905c6f875.


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

Branch: refs/heads/asf-site
Commit: 5eb822036713a8c7c22eea8ef4d9ec6ec87b675d
Parents: 58f5140
Author: jenkins <bu...@apache.org>
Authored: Thu Mar 10 15:36:05 2016 +0000
Committer: Misty Stanley-Jones <ms...@cloudera.com>
Committed: Thu Mar 10 09:21:51 2016 -0800

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |     4 +-
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 .../org/apache/hadoop/hbase/ProcedureInfo.html  |     2 +-
 book.html                                       |     2 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 25462 ++++++++---------
 checkstyle.rss                                  |     4 +-
 coc.html                                        |     4 +-
 cygwin.html                                     |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/index-all.html                       |    13 +
 .../hbase/classification/package-tree.html      |     4 +-
 .../hadoop/hbase/client/ClientScanner.html      |    22 +-
 .../hadoop/hbase/client/package-tree.html       |     6 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     2 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     2 +-
 .../procedure/AddColumnFamilyProcedure.html     |     2 +-
 .../procedure/CreateNamespaceProcedure.html     |    94 +-
 .../master/procedure/CreateTableProcedure.html  |    31 +-
 .../procedure/DeleteColumnFamilyProcedure.html  |     2 +-
 .../procedure/DeleteNamespaceProcedure.html     |     2 +-
 .../master/procedure/DeleteTableProcedure.html  |     2 +-
 .../master/procedure/DisableTableProcedure.html |     2 +-
 .../master/procedure/EnableTableProcedure.html  |     2 +-
 .../procedure/ModifyColumnFamilyProcedure.html  |     2 +-
 .../procedure/ModifyNamespaceProcedure.html     |     2 +-
 .../master/procedure/ModifyTableProcedure.html  |     2 +-
 .../master/procedure/ServerCrashProcedure.html  |    45 +-
 .../procedure/TruncateTableProcedure.html       |     2 +-
 .../procedure/class-use/MasterProcedureEnv.html |    50 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    14 +-
 .../hbase/procedure2/OnePhaseProcedure.html     |     2 +-
 .../hadoop/hbase/procedure2/Procedure.html      |   149 +-
 ...edureExecutor.CompletedProcedureCleaner.html |    12 +-
 .../hbase/procedure2/ProcedureExecutor.html     |   112 +-
 .../hbase/procedure2/SequentialProcedure.html   |     2 +-
 .../hbase/procedure2/StateMachineProcedure.html |     2 +-
 .../hbase/procedure2/TwoPhaseProcedure.html     |     2 +-
 .../hadoop/hbase/quotas/package-tree.html       |     4 +-
 .../regionserver/HRegion.RegionScannerImpl.html |    92 +-
 .../hadoop/hbase/regionserver/HRegion.html      |   196 +-
 .../hadoop/hbase/regionserver/package-tree.html |    24 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   210 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    84 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    42 +-
 .../org/apache/hadoop/hbase/util/HBaseFsck.html |     4 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     6 +-
 .../org/apache/hadoop/hbase/ProcedureInfo.html  |     2 +-
 .../hadoop/hbase/client/ClientScanner.html      |   797 +-
 .../procedure/CreateNamespaceProcedure.html     |   351 +-
 .../CreateTableProcedure.CreateHdfsRegions.html |     9 +-
 .../master/procedure/CreateTableProcedure.html  |     9 +-
 .../master/procedure/ServerCrashProcedure.html  |     9 +-
 .../hadoop/hbase/procedure2/Procedure.html      |  1169 +-
 ...edureExecutor.CompletedProcedureCleaner.html |  2260 +-
 ...edureExecutor.ProcedureExecutorListener.html |  2260 +-
 ...edureExecutor.ProcedureTimeoutRetriever.html |  2260 +-
 .../procedure2/ProcedureExecutor.Testing.html   |  2260 +-
 .../hbase/procedure2/ProcedureExecutor.html     |  2260 +-
 .../regionserver/HRegion.BatchOperation.html    |  5191 ++--
 .../regionserver/HRegion.FlushResultImpl.html   |  5191 ++--
 .../regionserver/HRegion.MutationBatch.html     |  5191 ++--
 .../HRegion.PrepareFlushResult.html             |  5191 ++--
 .../regionserver/HRegion.RegionScannerImpl.html |  5191 ++--
 .../hbase/regionserver/HRegion.ReplayBatch.html |  5191 ++--
 .../regionserver/HRegion.RowLockContext.html    |  5191 ++--
 .../hbase/regionserver/HRegion.RowLockImpl.html |  5191 ++--
 .../hbase/regionserver/HRegion.WriteState.html  |  5191 ++--
 .../hadoop/hbase/regionserver/HRegion.html      |  5191 ++--
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   210 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   210 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   210 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    56 +-
 ...BaseFsck.CheckRegionConsistencyWorkItem.html |     4 +-
 .../HBaseFsck.ErrorReporter.ERROR_CODE.html     |     4 +-
 .../hbase/util/HBaseFsck.ErrorReporter.html     |     4 +-
 .../hbase/util/HBaseFsck.FileLockCallable.html  |     4 +-
 .../hbase/util/HBaseFsck.HBaseFsckTool.html     |     4 +-
 .../hadoop/hbase/util/HBaseFsck.HbckInfo.html   |     4 +-
 .../hadoop/hbase/util/HBaseFsck.HdfsEntry.html  |     4 +-
 .../hadoop/hbase/util/HBaseFsck.MetaEntry.html  |     4 +-
 .../hbase/util/HBaseFsck.OnlineEntry.html       |     4 +-
 .../util/HBaseFsck.PrintingErrorReporter.html   |     4 +-
 .../HBaseFsck.RegionBoundariesInformation.html  |     4 +-
 .../util/HBaseFsck.RegionRepairException.html   |     4 +-
 .../HBaseFsck.TableInfo.HDFSIntegrityFixer.html |     4 +-
 ...aseFsck.TableInfo.IntegrityFixSuggester.html |     4 +-
 .../hadoop/hbase/util/HBaseFsck.TableInfo.html  |     4 +-
 .../hbase/util/HBaseFsck.WorkItemHdfsDir.html   |     4 +-
 .../util/HBaseFsck.WorkItemHdfsRegionInfo.html  |     4 +-
 .../util/HBaseFsck.WorkItemOverlapMerge.html    |     4 +-
 .../hbase/util/HBaseFsck.WorkItemRegion.html    |     4 +-
 .../org/apache/hadoop/hbase/util/HBaseFsck.html |     4 +-
 distribution-management.html                    |     4 +-
 export_control.html                             |     4 +-
 hbase-annotations/checkstyle.html               |     6 +-
 hbase-annotations/dependencies.html             |     6 +-
 hbase-annotations/dependency-convergence.html   |     6 +-
 hbase-annotations/dependency-info.html          |     6 +-
 hbase-annotations/dependency-management.html    |     6 +-
 hbase-annotations/distribution-management.html  |     6 +-
 hbase-annotations/index.html                    |     6 +-
 hbase-annotations/integration.html              |     6 +-
 hbase-annotations/issue-tracking.html           |     6 +-
 hbase-annotations/license.html                  |     6 +-
 hbase-annotations/mail-lists.html               |     6 +-
 hbase-annotations/plugin-management.html        |     6 +-
 hbase-annotations/plugins.html                  |     6 +-
 hbase-annotations/project-info.html             |     6 +-
 hbase-annotations/project-reports.html          |     6 +-
 hbase-annotations/project-summary.html          |     6 +-
 hbase-annotations/source-repository.html        |     6 +-
 hbase-annotations/team-list.html                |     6 +-
 hbase-archetypes/dependencies.html              |     6 +-
 hbase-archetypes/dependency-convergence.html    |     6 +-
 hbase-archetypes/dependency-info.html           |     6 +-
 hbase-archetypes/dependency-management.html     |     6 +-
 hbase-archetypes/distribution-management.html   |     6 +-
 .../hbase-archetype-builder/dependencies.html   |     6 +-
 .../dependency-convergence.html                 |     6 +-
 .../dependency-info.html                        |     6 +-
 .../dependency-management.html                  |     6 +-
 .../distribution-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 +-
 .../distribution-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 +-
 .../distribution-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 +-
 hbase-archetypes/index.html                     |     6 +-
 hbase-archetypes/integration.html               |     6 +-
 hbase-archetypes/issue-tracking.html            |     6 +-
 hbase-archetypes/license.html                   |     6 +-
 hbase-archetypes/mail-lists.html                |     6 +-
 hbase-archetypes/modules.html                   |     6 +-
 hbase-archetypes/plugin-management.html         |     6 +-
 hbase-archetypes/plugins.html                   |     6 +-
 hbase-archetypes/project-info.html              |     6 +-
 hbase-archetypes/project-summary.html           |     6 +-
 hbase-archetypes/source-repository.html         |     6 +-
 hbase-archetypes/team-list.html                 |     6 +-
 hbase-spark/checkstyle.html                     |    10 +-
 hbase-spark/dependencies.html                   |     6 +-
 hbase-spark/dependency-convergence.html         |     6 +-
 hbase-spark/dependency-info.html                |     6 +-
 hbase-spark/dependency-management.html          |     6 +-
 hbase-spark/distribution-management.html        |     6 +-
 hbase-spark/index.html                          |     6 +-
 hbase-spark/integration.html                    |     6 +-
 hbase-spark/issue-tracking.html                 |     6 +-
 hbase-spark/license.html                        |     6 +-
 hbase-spark/mail-lists.html                     |     6 +-
 hbase-spark/plugin-management.html              |     6 +-
 hbase-spark/plugins.html                        |     6 +-
 hbase-spark/project-info.html                   |     6 +-
 hbase-spark/project-reports.html                |     6 +-
 hbase-spark/project-summary.html                |     6 +-
 hbase-spark/source-repository.html              |     6 +-
 hbase-spark/team-list.html                      |     6 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 modules.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |     4 +-
 project-info.html                               |     4 +-
 project-reports.html                            |     4 +-
 project-summary.html                            |     4 +-
 pseudo-distributed.html                         |     4 +-
 replication.html                                |     4 +-
 resources.html                                  |     4 +-
 source-repository.html                          |     4 +-
 sponsors.html                                   |     4 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testdevapidocs/allclasses-frame.html            |     3 +
 testdevapidocs/allclasses-noframe.html          |     3 +
 testdevapidocs/index-all.html                   |    58 +
 .../hadoop/hbase/io/hfile/package-tree.html     |     2 +-
 ...bleProcedure.FaultyCreateTableProcedure.html |     2 +-
 ...ocedureScheduler.TestNamespaceProcedure.html |     2 +-
 ...erProcedureScheduler.TestTableProcedure.html |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../ProcedureTestingUtility.TestProcedure.html  |     2 +-
 ...stProcedureExecution.TestFaultyRollback.html |     2 +-
 ...cedureExecution.TestSequentialProcedure.html |     2 +-
 ...tion.TestWaitingProcedure.TestWaitChild.html |     2 +-
 ...ProcedureExecution.TestWaitingProcedure.html |     2 +-
 ...ProcedureRecovery.BaseTestStepProcedure.html |     2 +-
 ...y.TestMultiStepProcedure.Step1Procedure.html |     2 +-
 ...y.TestMultiStepProcedure.Step2Procedure.html |     2 +-
 ...rocedureRecovery.TestMultiStepProcedure.html |     2 +-
 ...ocedureRecovery.TestSingleStepProcedure.html |     2 +-
 ...edureRecovery.TestStateMachineProcedure.html |     2 +-
 .../TestProcedureReplayOrder.TestProcedure.html |     2 +-
 ...dureReplayOrder.TestSingleStepProcedure.html |     2 +-
 ...ocedureReplayOrder.TestTwoStepProcedure.html |     2 +-
 .../TestProcedureToString.BasicProcedure.html   |     2 +-
 ...tring.DoublingStateStringBasicProcedure.html |     2 +-
 ...ureToString.SimpleStateMachineProcedure.html |     2 +-
 .../TestYieldProcedures.TestProcEnv.html        |    12 +-
 .../TestYieldProcedures.TestRunQueue.html       |   446 +
 ...TestStateMachineProcedure.ExecutionInfo.html |    16 +-
 ...cedures.TestStateMachineProcedure.State.html |    16 +-
 ...eldProcedures.TestStateMachineProcedure.html |    36 +-
 .../TestYieldProcedures.TestYieldProcedure.html |   407 +
 .../hbase/procedure2/TestYieldProcedures.html   |    68 +-
 .../TestYieldProcedures.TestProcEnv.html        |    16 +
 .../TestYieldProcedures.TestRunQueue.html       |   155 +
 .../TestYieldProcedures.TestYieldProcedure.html |   115 +
 .../hadoop/hbase/procedure2/package-frame.html  |     2 +
 .../hbase/procedure2/package-summary.html       |     8 +
 .../hadoop/hbase/procedure2/package-tree.html   |     6 +
 .../hadoop/hbase/procedure2/package-use.html    |     5 +-
 ...LProcedureStore.TestSequentialProcedure.html |     2 +-
 ...annerHeartbeatMessages.HeartbeatHRegion.html |    22 +-
 ...eartbeatMessages.HeartbeatHRegionServer.html |     8 +-
 ...cannerHeartbeatMessages.HeartbeatKVHeap.html |     8 +-
 ...rHeartbeatMessages.HeartbeatRPCServices.html |    12 +-
 ...eartbeatMessages.HeartbeatRegionScanner.html |     8 +-
 ...artbeatMessages.HeartbeatReversedKVHeap.html |     6 +-
 ...Messages.HeartbeatReversedRegionScanner.html |     8 +-
 ...stScannerHeartbeatMessages.SparseFilter.html |   333 +
 .../TestScannerHeartbeatMessages.html           |    93 +-
 .../TestScannerRetriableFailure.html            |     4 +-
 ...stScannerHeartbeatMessages.SparseFilter.html |   115 +
 .../hbase/regionserver/package-frame.html       |     1 +
 .../hbase/regionserver/package-summary.html     |    96 +-
 .../hadoop/hbase/regionserver/package-tree.html |    11 +-
 ...tAccessController.TestTableDDLProcedure.html |     2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     2 +-
 testdevapidocs/overview-tree.html               |     7 +
 .../hfile/TestCacheConfig.DataCacheEntry.html   |     4 +-
 .../io/hfile/TestCacheConfig.Deserializer.html  |     4 +-
 .../hfile/TestCacheConfig.IndexCacheEntry.html  |     4 +-
 .../hfile/TestCacheConfig.MetaCacheEntry.html   |     4 +-
 .../hadoop/hbase/io/hfile/TestCacheConfig.html  |     4 +-
 .../TestYieldProcedures.TestProcEnv.html        |   610 +-
 .../TestYieldProcedures.TestRunQueue.html       |   455 +
 ...TestStateMachineProcedure.ExecutionInfo.html |   610 +-
 ...cedures.TestStateMachineProcedure.State.html |   610 +-
 ...eldProcedures.TestStateMachineProcedure.html |   610 +-
 .../TestYieldProcedures.TestYieldProcedure.html |   455 +
 .../hbase/procedure2/TestYieldProcedures.html   |   610 +-
 ...annerHeartbeatMessages.HeartbeatHRegion.html |  1072 +-
 ...eartbeatMessages.HeartbeatHRegionServer.html |  1072 +-
 ...cannerHeartbeatMessages.HeartbeatKVHeap.html |  1072 +-
 ...rHeartbeatMessages.HeartbeatRPCServices.html |  1072 +-
 ...eartbeatMessages.HeartbeatRegionScanner.html |  1072 +-
 ...artbeatMessages.HeartbeatReversedKVHeap.html |  1072 +-
 ...Messages.HeartbeatReversedRegionScanner.html |  1072 +-
 ...stScannerHeartbeatMessages.SparseFilter.html |   673 +
 .../TestScannerHeartbeatMessages.html           |  1072 +-
 xref-test/allclasses-frame.html                 |     9 +
 .../hadoop/hbase/io/hfile/TestCacheConfig.html  |     4 +-
 .../hbase/procedure2/TestYieldProcedures.html   |   610 +-
 .../hadoop/hbase/procedure2/package-frame.html  |     6 +
 .../hbase/procedure2/package-summary.html       |    10 +
 .../TestScannerHeartbeatMessages.html           |  1072 +-
 .../hbase/regionserver/package-frame.html       |     3 +
 .../hbase/regionserver/package-summary.html     |     5 +
 xref/org/apache/hadoop/hbase/ProcedureInfo.html |     2 +-
 .../hadoop/hbase/client/ClientScanner.html      |   797 +-
 .../procedure/CreateNamespaceProcedure.html     |   351 +-
 .../master/procedure/CreateTableProcedure.html  |     9 +-
 .../master/procedure/ServerCrashProcedure.html  |     9 +-
 .../hadoop/hbase/procedure2/Procedure.html      |  1171 +-
 .../hbase/procedure2/ProcedureExecutor.html     |  2260 +-
 .../hadoop/hbase/regionserver/HRegion.html      |  5191 ++--
 .../hbase/spark/SparkSQLPushDownFilter.html     |   462 +-
 .../hbase/tmpl/common/TaskMonitorTmpl.html      |    90 +-
 .../hbase/tmpl/common/TaskMonitorTmplImpl.html  |    24 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   210 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    56 +-
 .../org/apache/hadoop/hbase/util/HBaseFsck.html |     4 +-
 334 files changed, 63189 insertions(+), 58389 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index d1cf5cd..a10ddf0 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -600,7 +600,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index f352c58..daf1d8e 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:20160308152326+00'00')
-/ModDate (D:20160308152326+00'00')
+/CreationDate (D:20160310152143+00'00')
+/ModDate (D:20160310152143+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index d4bb020..ba9fa2d 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:20160308152523)
-  /CreationDate (D:20160308152523)
+  /ModDate (D:20160310152336)
+  /CreationDate (D:20160310152336)
   /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/5eb82203/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html b/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
index 72817ea..16e5e6c 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
@@ -211,7 +211,7 @@
 <span class="sourceLineNo">203</span><a name="line.203"></a>
 <span class="sourceLineNo">204</span>  @InterfaceAudience.Private<a name="line.204"></a>
 <span class="sourceLineNo">205</span>  public boolean hasClientAckTime() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    return clientAckTime &gt; 0;<a name="line.206"></a>
+<span class="sourceLineNo">206</span>    return clientAckTime != -1;<a name="line.206"></a>
 <span class="sourceLineNo">207</span>  }<a name="line.207"></a>
 <span class="sourceLineNo">208</span><a name="line.208"></a>
 <span class="sourceLineNo">209</span>  @InterfaceAudience.Private<a name="line.209"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index c4fa86a..7e6e15b 100644
--- a/book.html
+++ b/book.html
@@ -33211,7 +33211,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 2.0.0-SNAPSHOT<br>
-Last updated 2016-03-08 14:52:14 UTC
+Last updated 2016-03-10 14:49:29 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index c4c329b..f6dbf8b 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160308" />
+    <meta name="Date-Revision-yyyymmdd" content="20160310" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-03-08</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-03-10</li>
             </p>
                 </div>
 


[30/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
index 57b645b..8c624dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
@@ -5305,2629 +5305,2632 @@
 <span class="sourceLineNo">5297</span>    Preconditions.checkNotNull(familyPaths);<a name="line.5297"></a>
 <span class="sourceLineNo">5298</span>    // we need writeLock for multi-family bulk load<a name="line.5298"></a>
 <span class="sourceLineNo">5299</span>    startBulkRegionOperation(hasMultipleColumnFamilies(familyPaths));<a name="line.5299"></a>
-<span class="sourceLineNo">5300</span>    try {<a name="line.5300"></a>
-<span class="sourceLineNo">5301</span>      this.writeRequestsCount.increment();<a name="line.5301"></a>
-<span class="sourceLineNo">5302</span><a name="line.5302"></a>
-<span class="sourceLineNo">5303</span>      // There possibly was a split that happened between when the split keys<a name="line.5303"></a>
-<span class="sourceLineNo">5304</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5304"></a>
-<span class="sourceLineNo">5305</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5305"></a>
-<span class="sourceLineNo">5306</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5306"></a>
-<span class="sourceLineNo">5307</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5307"></a>
-<span class="sourceLineNo">5308</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5308"></a>
-<span class="sourceLineNo">5309</span>        byte[] familyName = p.getFirst();<a name="line.5309"></a>
-<span class="sourceLineNo">5310</span>        String path = p.getSecond();<a name="line.5310"></a>
-<span class="sourceLineNo">5311</span><a name="line.5311"></a>
-<span class="sourceLineNo">5312</span>        Store store = getStore(familyName);<a name="line.5312"></a>
-<span class="sourceLineNo">5313</span>        if (store == null) {<a name="line.5313"></a>
-<span class="sourceLineNo">5314</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5314"></a>
-<span class="sourceLineNo">5315</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5315"></a>
-<span class="sourceLineNo">5316</span>          ioes.add(ioe);<a name="line.5316"></a>
-<span class="sourceLineNo">5317</span>        } else {<a name="line.5317"></a>
-<span class="sourceLineNo">5318</span>          try {<a name="line.5318"></a>
-<span class="sourceLineNo">5319</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5319"></a>
-<span class="sourceLineNo">5320</span>          } catch (WrongRegionException wre) {<a name="line.5320"></a>
-<span class="sourceLineNo">5321</span>            // recoverable (file doesn't fit in region)<a name="line.5321"></a>
-<span class="sourceLineNo">5322</span>            failures.add(p);<a name="line.5322"></a>
-<span class="sourceLineNo">5323</span>          } catch (IOException ioe) {<a name="line.5323"></a>
-<span class="sourceLineNo">5324</span>            // unrecoverable (hdfs problem)<a name="line.5324"></a>
-<span class="sourceLineNo">5325</span>            ioes.add(ioe);<a name="line.5325"></a>
-<span class="sourceLineNo">5326</span>          }<a name="line.5326"></a>
-<span class="sourceLineNo">5327</span>        }<a name="line.5327"></a>
-<span class="sourceLineNo">5328</span>      }<a name="line.5328"></a>
-<span class="sourceLineNo">5329</span><a name="line.5329"></a>
-<span class="sourceLineNo">5330</span>      // validation failed because of some sort of IO problem.<a name="line.5330"></a>
-<span class="sourceLineNo">5331</span>      if (ioes.size() != 0) {<a name="line.5331"></a>
-<span class="sourceLineNo">5332</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5332"></a>
-<span class="sourceLineNo">5333</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5333"></a>
-<span class="sourceLineNo">5334</span>        throw e;<a name="line.5334"></a>
-<span class="sourceLineNo">5335</span>      }<a name="line.5335"></a>
-<span class="sourceLineNo">5336</span><a name="line.5336"></a>
-<span class="sourceLineNo">5337</span>      // validation failed, bail out before doing anything permanent.<a name="line.5337"></a>
-<span class="sourceLineNo">5338</span>      if (failures.size() != 0) {<a name="line.5338"></a>
-<span class="sourceLineNo">5339</span>        StringBuilder list = new StringBuilder();<a name="line.5339"></a>
-<span class="sourceLineNo">5340</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5340"></a>
-<span class="sourceLineNo">5341</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5341"></a>
-<span class="sourceLineNo">5342</span>              .append(p.getSecond());<a name="line.5342"></a>
-<span class="sourceLineNo">5343</span>        }<a name="line.5343"></a>
-<span class="sourceLineNo">5344</span>        // problem when validating<a name="line.5344"></a>
-<span class="sourceLineNo">5345</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5345"></a>
-<span class="sourceLineNo">5346</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5346"></a>
-<span class="sourceLineNo">5347</span>        return false;<a name="line.5347"></a>
-<span class="sourceLineNo">5348</span>      }<a name="line.5348"></a>
-<span class="sourceLineNo">5349</span><a name="line.5349"></a>
-<span class="sourceLineNo">5350</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5350"></a>
-<span class="sourceLineNo">5351</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5351"></a>
-<span class="sourceLineNo">5352</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5352"></a>
-<span class="sourceLineNo">5353</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5353"></a>
-<span class="sourceLineNo">5354</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5354"></a>
-<span class="sourceLineNo">5355</span>      if (assignSeqId) {<a name="line.5355"></a>
-<span class="sourceLineNo">5356</span>        FlushResult fs = flushcache(true, false);<a name="line.5356"></a>
-<span class="sourceLineNo">5357</span>        if (fs.isFlushSucceeded()) {<a name="line.5357"></a>
-<span class="sourceLineNo">5358</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5358"></a>
-<span class="sourceLineNo">5359</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5359"></a>
-<span class="sourceLineNo">5360</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5360"></a>
-<span class="sourceLineNo">5361</span>        } else {<a name="line.5361"></a>
-<span class="sourceLineNo">5362</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5362"></a>
-<span class="sourceLineNo">5363</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5363"></a>
-<span class="sourceLineNo">5364</span>        }<a name="line.5364"></a>
-<span class="sourceLineNo">5365</span>      }<a name="line.5365"></a>
-<span class="sourceLineNo">5366</span><a name="line.5366"></a>
-<span class="sourceLineNo">5367</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5367"></a>
-<span class="sourceLineNo">5368</span>        byte[] familyName = p.getFirst();<a name="line.5368"></a>
-<span class="sourceLineNo">5369</span>        String path = p.getSecond();<a name="line.5369"></a>
-<span class="sourceLineNo">5370</span>        Store store = getStore(familyName);<a name="line.5370"></a>
-<span class="sourceLineNo">5371</span>        try {<a name="line.5371"></a>
-<span class="sourceLineNo">5372</span>          String finalPath = path;<a name="line.5372"></a>
-<span class="sourceLineNo">5373</span>          if (bulkLoadListener != null) {<a name="line.5373"></a>
-<span class="sourceLineNo">5374</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5374"></a>
-<span class="sourceLineNo">5375</span>          }<a name="line.5375"></a>
-<span class="sourceLineNo">5376</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5376"></a>
-<span class="sourceLineNo">5377</span><a name="line.5377"></a>
-<span class="sourceLineNo">5378</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5378"></a>
-<span class="sourceLineNo">5379</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5379"></a>
-<span class="sourceLineNo">5380</span>          } else {<a name="line.5380"></a>
-<span class="sourceLineNo">5381</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5381"></a>
-<span class="sourceLineNo">5382</span>            storeFileNames.add(commitedStoreFile);<a name="line.5382"></a>
-<span class="sourceLineNo">5383</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5383"></a>
-<span class="sourceLineNo">5384</span>          }<a name="line.5384"></a>
-<span class="sourceLineNo">5385</span>          if (bulkLoadListener != null) {<a name="line.5385"></a>
-<span class="sourceLineNo">5386</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5386"></a>
-<span class="sourceLineNo">5387</span>          }<a name="line.5387"></a>
-<span class="sourceLineNo">5388</span>        } catch (IOException ioe) {<a name="line.5388"></a>
-<span class="sourceLineNo">5389</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5389"></a>
-<span class="sourceLineNo">5390</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5390"></a>
-<span class="sourceLineNo">5391</span><a name="line.5391"></a>
-<span class="sourceLineNo">5392</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5392"></a>
-<span class="sourceLineNo">5393</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5393"></a>
-<span class="sourceLineNo">5394</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5394"></a>
-<span class="sourceLineNo">5395</span>          if (bulkLoadListener != null) {<a name="line.5395"></a>
-<span class="sourceLineNo">5396</span>            try {<a name="line.5396"></a>
-<span class="sourceLineNo">5397</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5397"></a>
-<span class="sourceLineNo">5398</span>            } catch (Exception ex) {<a name="line.5398"></a>
-<span class="sourceLineNo">5399</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5399"></a>
-<span class="sourceLineNo">5400</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5400"></a>
-<span class="sourceLineNo">5401</span>            }<a name="line.5401"></a>
-<span class="sourceLineNo">5402</span>          }<a name="line.5402"></a>
-<span class="sourceLineNo">5403</span>          throw ioe;<a name="line.5403"></a>
-<span class="sourceLineNo">5404</span>        }<a name="line.5404"></a>
-<span class="sourceLineNo">5405</span>      }<a name="line.5405"></a>
-<span class="sourceLineNo">5406</span><a name="line.5406"></a>
-<span class="sourceLineNo">5407</span>      return true;<a name="line.5407"></a>
-<span class="sourceLineNo">5408</span>    } finally {<a name="line.5408"></a>
-<span class="sourceLineNo">5409</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5409"></a>
-<span class="sourceLineNo">5410</span>        // @rite a bulk load event when not all hfiles are loaded<a name="line.5410"></a>
-<span class="sourceLineNo">5411</span>        try {<a name="line.5411"></a>
-<span class="sourceLineNo">5412</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5412"></a>
-<span class="sourceLineNo">5413</span>              this.getRegionInfo().getTable(),<a name="line.5413"></a>
-<span class="sourceLineNo">5414</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5414"></a>
-<span class="sourceLineNo">5415</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5415"></a>
-<span class="sourceLineNo">5416</span>              loadDescriptor, mvcc);<a name="line.5416"></a>
-<span class="sourceLineNo">5417</span>        } catch (IOException ioe) {<a name="line.5417"></a>
-<span class="sourceLineNo">5418</span>          if (this.rsServices != null) {<a name="line.5418"></a>
-<span class="sourceLineNo">5419</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5419"></a>
-<span class="sourceLineNo">5420</span>            // the event into WAL<a name="line.5420"></a>
-<span class="sourceLineNo">5421</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5421"></a>
-<span class="sourceLineNo">5422</span>          }<a name="line.5422"></a>
-<span class="sourceLineNo">5423</span>        }<a name="line.5423"></a>
-<span class="sourceLineNo">5424</span>      }<a name="line.5424"></a>
-<span class="sourceLineNo">5425</span><a name="line.5425"></a>
-<span class="sourceLineNo">5426</span>      closeBulkRegionOperation();<a name="line.5426"></a>
-<span class="sourceLineNo">5427</span>    }<a name="line.5427"></a>
-<span class="sourceLineNo">5428</span>  }<a name="line.5428"></a>
-<span class="sourceLineNo">5429</span><a name="line.5429"></a>
-<span class="sourceLineNo">5430</span>  @Override<a name="line.5430"></a>
-<span class="sourceLineNo">5431</span>  public boolean equals(Object o) {<a name="line.5431"></a>
-<span class="sourceLineNo">5432</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5432"></a>
-<span class="sourceLineNo">5433</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5433"></a>
-<span class="sourceLineNo">5434</span>  }<a name="line.5434"></a>
-<span class="sourceLineNo">5435</span><a name="line.5435"></a>
-<span class="sourceLineNo">5436</span>  @Override<a name="line.5436"></a>
-<span class="sourceLineNo">5437</span>  public int hashCode() {<a name="line.5437"></a>
-<span class="sourceLineNo">5438</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5438"></a>
-<span class="sourceLineNo">5439</span>  }<a name="line.5439"></a>
-<span class="sourceLineNo">5440</span><a name="line.5440"></a>
-<span class="sourceLineNo">5441</span>  @Override<a name="line.5441"></a>
-<span class="sourceLineNo">5442</span>  public String toString() {<a name="line.5442"></a>
-<span class="sourceLineNo">5443</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5443"></a>
-<span class="sourceLineNo">5444</span>  }<a name="line.5444"></a>
-<span class="sourceLineNo">5445</span><a name="line.5445"></a>
-<span class="sourceLineNo">5446</span>  /**<a name="line.5446"></a>
-<span class="sourceLineNo">5447</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5447"></a>
-<span class="sourceLineNo">5448</span>   */<a name="line.5448"></a>
-<span class="sourceLineNo">5449</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5449"></a>
-<span class="sourceLineNo">5450</span>    // Package local for testability<a name="line.5450"></a>
-<span class="sourceLineNo">5451</span>    KeyValueHeap storeHeap = null;<a name="line.5451"></a>
-<span class="sourceLineNo">5452</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5452"></a>
-<span class="sourceLineNo">5453</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5453"></a>
-<span class="sourceLineNo">5454</span>    KeyValueHeap joinedHeap = null;<a name="line.5454"></a>
-<span class="sourceLineNo">5455</span>    /**<a name="line.5455"></a>
-<span class="sourceLineNo">5456</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5456"></a>
-<span class="sourceLineNo">5457</span>     * contain the row for which we are populating the values.*/<a name="line.5457"></a>
-<span class="sourceLineNo">5458</span>    protected Cell joinedContinuationRow = null;<a name="line.5458"></a>
-<span class="sourceLineNo">5459</span>    private boolean filterClosed = false;<a name="line.5459"></a>
-<span class="sourceLineNo">5460</span><a name="line.5460"></a>
-<span class="sourceLineNo">5461</span>    protected final int isScan;<a name="line.5461"></a>
-<span class="sourceLineNo">5462</span>    protected final byte[] stopRow;<a name="line.5462"></a>
-<span class="sourceLineNo">5463</span>    protected final HRegion region;<a name="line.5463"></a>
-<span class="sourceLineNo">5464</span>    protected final CellComparator comparator;<a name="line.5464"></a>
-<span class="sourceLineNo">5465</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5465"></a>
-<span class="sourceLineNo">5466</span><a name="line.5466"></a>
-<span class="sourceLineNo">5467</span>    private final long readPt;<a name="line.5467"></a>
-<span class="sourceLineNo">5468</span>    private final long maxResultSize;<a name="line.5468"></a>
-<span class="sourceLineNo">5469</span>    private final ScannerContext defaultScannerContext;<a name="line.5469"></a>
-<span class="sourceLineNo">5470</span>    private final FilterWrapper filter;<a name="line.5470"></a>
-<span class="sourceLineNo">5471</span><a name="line.5471"></a>
-<span class="sourceLineNo">5472</span>    @Override<a name="line.5472"></a>
-<span class="sourceLineNo">5473</span>    public HRegionInfo getRegionInfo() {<a name="line.5473"></a>
-<span class="sourceLineNo">5474</span>      return region.getRegionInfo();<a name="line.5474"></a>
-<span class="sourceLineNo">5475</span>    }<a name="line.5475"></a>
-<span class="sourceLineNo">5476</span><a name="line.5476"></a>
-<span class="sourceLineNo">5477</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5477"></a>
-<span class="sourceLineNo">5478</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5478"></a>
-<span class="sourceLineNo">5479</span>    }<a name="line.5479"></a>
-<span class="sourceLineNo">5480</span><a name="line.5480"></a>
-<span class="sourceLineNo">5481</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5481"></a>
-<span class="sourceLineNo">5482</span>        boolean copyCellsFromSharedMem)<a name="line.5482"></a>
-<span class="sourceLineNo">5483</span>        throws IOException {<a name="line.5483"></a>
-<span class="sourceLineNo">5484</span>      this.region = region;<a name="line.5484"></a>
-<span class="sourceLineNo">5485</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5485"></a>
-<span class="sourceLineNo">5486</span>      if (scan.hasFilter()) {<a name="line.5486"></a>
-<span class="sourceLineNo">5487</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5487"></a>
-<span class="sourceLineNo">5488</span>      } else {<a name="line.5488"></a>
-<span class="sourceLineNo">5489</span>        this.filter = null;<a name="line.5489"></a>
-<span class="sourceLineNo">5490</span>      }<a name="line.5490"></a>
-<span class="sourceLineNo">5491</span>      this.comparator = region.getCellCompartor();<a name="line.5491"></a>
-<span class="sourceLineNo">5492</span>      /**<a name="line.5492"></a>
-<span class="sourceLineNo">5493</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5493"></a>
-<span class="sourceLineNo">5494</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5494"></a>
-<span class="sourceLineNo">5495</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5495"></a>
-<span class="sourceLineNo">5496</span>       */<a name="line.5496"></a>
-<span class="sourceLineNo">5497</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5497"></a>
-<span class="sourceLineNo">5498</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5498"></a>
-<span class="sourceLineNo">5499</span><a name="line.5499"></a>
-<span class="sourceLineNo">5500</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5500"></a>
-<span class="sourceLineNo">5501</span>        this.stopRow = null;<a name="line.5501"></a>
-<span class="sourceLineNo">5502</span>      } else {<a name="line.5502"></a>
-<span class="sourceLineNo">5503</span>        this.stopRow = scan.getStopRow();<a name="line.5503"></a>
-<span class="sourceLineNo">5504</span>      }<a name="line.5504"></a>
-<span class="sourceLineNo">5505</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5505"></a>
-<span class="sourceLineNo">5506</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5506"></a>
-<span class="sourceLineNo">5507</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5507"></a>
-<span class="sourceLineNo">5508</span><a name="line.5508"></a>
-<span class="sourceLineNo">5509</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5509"></a>
-<span class="sourceLineNo">5510</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5510"></a>
-<span class="sourceLineNo">5511</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5511"></a>
-<span class="sourceLineNo">5512</span>      synchronized(scannerReadPoints) {<a name="line.5512"></a>
-<span class="sourceLineNo">5513</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5513"></a>
-<span class="sourceLineNo">5514</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5514"></a>
-<span class="sourceLineNo">5515</span>      }<a name="line.5515"></a>
-<span class="sourceLineNo">5516</span><a name="line.5516"></a>
-<span class="sourceLineNo">5517</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5517"></a>
-<span class="sourceLineNo">5518</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5518"></a>
-<span class="sourceLineNo">5519</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5519"></a>
-<span class="sourceLineNo">5520</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5520"></a>
-<span class="sourceLineNo">5521</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5521"></a>
-<span class="sourceLineNo">5522</span>      if (additionalScanners != null) {<a name="line.5522"></a>
-<span class="sourceLineNo">5523</span>        scanners.addAll(additionalScanners);<a name="line.5523"></a>
-<span class="sourceLineNo">5524</span>      }<a name="line.5524"></a>
-<span class="sourceLineNo">5525</span><a name="line.5525"></a>
-<span class="sourceLineNo">5526</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5526"></a>
-<span class="sourceLineNo">5527</span>        Store store = stores.get(entry.getKey());<a name="line.5527"></a>
-<span class="sourceLineNo">5528</span>        KeyValueScanner scanner;<a name="line.5528"></a>
-<span class="sourceLineNo">5529</span>        try {<a name="line.5529"></a>
-<span class="sourceLineNo">5530</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5530"></a>
-<span class="sourceLineNo">5531</span>        } catch (FileNotFoundException e) {<a name="line.5531"></a>
-<span class="sourceLineNo">5532</span>          throw handleFileNotFound(e);<a name="line.5532"></a>
-<span class="sourceLineNo">5533</span>        }<a name="line.5533"></a>
-<span class="sourceLineNo">5534</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5534"></a>
-<span class="sourceLineNo">5535</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5535"></a>
-<span class="sourceLineNo">5536</span>          scanners.add(scanner);<a name="line.5536"></a>
-<span class="sourceLineNo">5537</span>        } else {<a name="line.5537"></a>
-<span class="sourceLineNo">5538</span>          joinedScanners.add(scanner);<a name="line.5538"></a>
-<span class="sourceLineNo">5539</span>        }<a name="line.5539"></a>
-<span class="sourceLineNo">5540</span>      }<a name="line.5540"></a>
-<span class="sourceLineNo">5541</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5541"></a>
-<span class="sourceLineNo">5542</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5542"></a>
-<span class="sourceLineNo">5543</span>    }<a name="line.5543"></a>
-<span class="sourceLineNo">5544</span><a name="line.5544"></a>
-<span class="sourceLineNo">5545</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5545"></a>
-<span class="sourceLineNo">5546</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5546"></a>
-<span class="sourceLineNo">5547</span>        throws IOException {<a name="line.5547"></a>
-<span class="sourceLineNo">5548</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5548"></a>
-<span class="sourceLineNo">5549</span>      if (!joinedScanners.isEmpty()) {<a name="line.5549"></a>
-<span class="sourceLineNo">5550</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5550"></a>
-<span class="sourceLineNo">5551</span>      }<a name="line.5551"></a>
-<span class="sourceLineNo">5552</span>    }<a name="line.5552"></a>
-<span class="sourceLineNo">5553</span><a name="line.5553"></a>
-<span class="sourceLineNo">5554</span>    @Override<a name="line.5554"></a>
-<span class="sourceLineNo">5555</span>    public long getMaxResultSize() {<a name="line.5555"></a>
-<span class="sourceLineNo">5556</span>      return maxResultSize;<a name="line.5556"></a>
-<span class="sourceLineNo">5557</span>    }<a name="line.5557"></a>
-<span class="sourceLineNo">5558</span><a name="line.5558"></a>
-<span class="sourceLineNo">5559</span>    @Override<a name="line.5559"></a>
-<span class="sourceLineNo">5560</span>    public long getMvccReadPoint() {<a name="line.5560"></a>
-<span class="sourceLineNo">5561</span>      return this.readPt;<a name="line.5561"></a>
-<span class="sourceLineNo">5562</span>    }<a name="line.5562"></a>
-<span class="sourceLineNo">5563</span><a name="line.5563"></a>
-<span class="sourceLineNo">5564</span>    @Override<a name="line.5564"></a>
-<span class="sourceLineNo">5565</span>    public int getBatch() {<a name="line.5565"></a>
-<span class="sourceLineNo">5566</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5566"></a>
-<span class="sourceLineNo">5567</span>    }<a name="line.5567"></a>
-<span class="sourceLineNo">5568</span><a name="line.5568"></a>
-<span class="sourceLineNo">5569</span>    /**<a name="line.5569"></a>
-<span class="sourceLineNo">5570</span>     * Reset both the filter and the old filter.<a name="line.5570"></a>
-<span class="sourceLineNo">5571</span>     *<a name="line.5571"></a>
-<span class="sourceLineNo">5572</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5572"></a>
-<span class="sourceLineNo">5573</span>     */<a name="line.5573"></a>
-<span class="sourceLineNo">5574</span>    protected void resetFilters() throws IOException {<a name="line.5574"></a>
-<span class="sourceLineNo">5575</span>      if (filter != null) {<a name="line.5575"></a>
-<span class="sourceLineNo">5576</span>        filter.reset();<a name="line.5576"></a>
-<span class="sourceLineNo">5577</span>      }<a name="line.5577"></a>
-<span class="sourceLineNo">5578</span>    }<a name="line.5578"></a>
-<span class="sourceLineNo">5579</span><a name="line.5579"></a>
-<span class="sourceLineNo">5580</span>    @Override<a name="line.5580"></a>
-<span class="sourceLineNo">5581</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5581"></a>
-<span class="sourceLineNo">5582</span>        throws IOException {<a name="line.5582"></a>
-<span class="sourceLineNo">5583</span>      // apply the batching limit by default<a name="line.5583"></a>
-<span class="sourceLineNo">5584</span>      return next(outResults, defaultScannerContext);<a name="line.5584"></a>
-<span class="sourceLineNo">5585</span>    }<a name="line.5585"></a>
-<span class="sourceLineNo">5586</span><a name="line.5586"></a>
-<span class="sourceLineNo">5587</span>    @Override<a name="line.5587"></a>
-<span class="sourceLineNo">5588</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5588"></a>
-<span class="sourceLineNo">5589</span>    throws IOException {<a name="line.5589"></a>
-<span class="sourceLineNo">5590</span>      if (this.filterClosed) {<a name="line.5590"></a>
-<span class="sourceLineNo">5591</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5591"></a>
-<span class="sourceLineNo">5592</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5592"></a>
-<span class="sourceLineNo">5593</span>            "or a lengthy garbage collection");<a name="line.5593"></a>
-<span class="sourceLineNo">5594</span>      }<a name="line.5594"></a>
-<span class="sourceLineNo">5595</span>      startRegionOperation(Operation.SCAN);<a name="line.5595"></a>
-<span class="sourceLineNo">5596</span>      readRequestsCount.increment();<a name="line.5596"></a>
-<span class="sourceLineNo">5597</span>      try {<a name="line.5597"></a>
-<span class="sourceLineNo">5598</span>        return nextRaw(outResults, scannerContext);<a name="line.5598"></a>
-<span class="sourceLineNo">5599</span>      } finally {<a name="line.5599"></a>
-<span class="sourceLineNo">5600</span>        closeRegionOperation(Operation.SCAN);<a name="line.5600"></a>
-<span class="sourceLineNo">5601</span>      }<a name="line.5601"></a>
-<span class="sourceLineNo">5602</span>    }<a name="line.5602"></a>
-<span class="sourceLineNo">5603</span><a name="line.5603"></a>
-<span class="sourceLineNo">5604</span>    @Override<a name="line.5604"></a>
-<span class="sourceLineNo">5605</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5605"></a>
-<span class="sourceLineNo">5606</span>      // Use the RegionScanner's context by default<a name="line.5606"></a>
-<span class="sourceLineNo">5607</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5607"></a>
-<span class="sourceLineNo">5608</span>    }<a name="line.5608"></a>
-<span class="sourceLineNo">5609</span><a name="line.5609"></a>
-<span class="sourceLineNo">5610</span>    @Override<a name="line.5610"></a>
-<span class="sourceLineNo">5611</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5611"></a>
-<span class="sourceLineNo">5612</span>        throws IOException {<a name="line.5612"></a>
-<span class="sourceLineNo">5613</span>      if (storeHeap == null) {<a name="line.5613"></a>
-<span class="sourceLineNo">5614</span>        // scanner is closed<a name="line.5614"></a>
-<span class="sourceLineNo">5615</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5615"></a>
-<span class="sourceLineNo">5616</span>      }<a name="line.5616"></a>
-<span class="sourceLineNo">5617</span>      boolean moreValues = false;<a name="line.5617"></a>
-<span class="sourceLineNo">5618</span>      try {<a name="line.5618"></a>
-<span class="sourceLineNo">5619</span>        if (outResults.isEmpty()) {<a name="line.5619"></a>
-<span class="sourceLineNo">5620</span>          // Usually outResults is empty. This is true when next is called<a name="line.5620"></a>
-<span class="sourceLineNo">5621</span>          // to handle scan or get operation.<a name="line.5621"></a>
-<span class="sourceLineNo">5622</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5622"></a>
-<span class="sourceLineNo">5623</span>        } else {<a name="line.5623"></a>
-<span class="sourceLineNo">5624</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5624"></a>
-<span class="sourceLineNo">5625</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5625"></a>
-<span class="sourceLineNo">5626</span>          outResults.addAll(tmpList);<a name="line.5626"></a>
-<span class="sourceLineNo">5627</span>        }<a name="line.5627"></a>
-<span class="sourceLineNo">5628</span><a name="line.5628"></a>
-<span class="sourceLineNo">5629</span>        // If the size limit was reached it means a partial Result is being<a name="line.5629"></a>
-<span class="sourceLineNo">5630</span>        // returned. Returning a<a name="line.5630"></a>
-<span class="sourceLineNo">5631</span>        // partial Result means that we should not reset the filters; filters<a name="line.5631"></a>
-<span class="sourceLineNo">5632</span>        // should only be reset in<a name="line.5632"></a>
-<span class="sourceLineNo">5633</span>        // between rows<a name="line.5633"></a>
-<span class="sourceLineNo">5634</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5634"></a>
-<span class="sourceLineNo">5635</span><a name="line.5635"></a>
-<span class="sourceLineNo">5636</span>        if (isFilterDoneInternal()) {<a name="line.5636"></a>
-<span class="sourceLineNo">5637</span>          moreValues = false;<a name="line.5637"></a>
-<span class="sourceLineNo">5638</span>        }<a name="line.5638"></a>
-<span class="sourceLineNo">5639</span><a name="line.5639"></a>
-<span class="sourceLineNo">5640</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5640"></a>
-<span class="sourceLineNo">5641</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5641"></a>
-<span class="sourceLineNo">5642</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5642"></a>
-<span class="sourceLineNo">5643</span>          // Do the copy of the results here.<a name="line.5643"></a>
-<span class="sourceLineNo">5644</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5644"></a>
-<span class="sourceLineNo">5645</span>          Cell cell = null;<a name="line.5645"></a>
-<span class="sourceLineNo">5646</span>          while (listItr.hasNext()) {<a name="line.5646"></a>
-<span class="sourceLineNo">5647</span>            cell = listItr.next();<a name="line.5647"></a>
-<span class="sourceLineNo">5648</span>            if (cell instanceof ShareableMemory) {<a name="line.5648"></a>
-<span class="sourceLineNo">5649</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5649"></a>
-<span class="sourceLineNo">5650</span>            }<a name="line.5650"></a>
-<span class="sourceLineNo">5651</span>          }<a name="line.5651"></a>
-<span class="sourceLineNo">5652</span>        }<a name="line.5652"></a>
-<span class="sourceLineNo">5653</span>      } finally {<a name="line.5653"></a>
-<span class="sourceLineNo">5654</span>        if (copyCellsFromSharedMem) {<a name="line.5654"></a>
-<span class="sourceLineNo">5655</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5655"></a>
-<span class="sourceLineNo">5656</span>          // the blocks then and there (for wrapped CPs)<a name="line.5656"></a>
-<span class="sourceLineNo">5657</span>          this.shipped();<a name="line.5657"></a>
-<span class="sourceLineNo">5658</span>        }<a name="line.5658"></a>
-<span class="sourceLineNo">5659</span>      }<a name="line.5659"></a>
-<span class="sourceLineNo">5660</span>      return moreValues;<a name="line.5660"></a>
-<span class="sourceLineNo">5661</span>    }<a name="line.5661"></a>
-<span class="sourceLineNo">5662</span><a name="line.5662"></a>
-<span class="sourceLineNo">5663</span>    /**<a name="line.5663"></a>
-<span class="sourceLineNo">5664</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5664"></a>
-<span class="sourceLineNo">5665</span>     */<a name="line.5665"></a>
-<span class="sourceLineNo">5666</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5666"></a>
-<span class="sourceLineNo">5667</span>            throws IOException {<a name="line.5667"></a>
-<span class="sourceLineNo">5668</span>      assert joinedContinuationRow != null;<a name="line.5668"></a>
-<span class="sourceLineNo">5669</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5669"></a>
-<span class="sourceLineNo">5670</span>          joinedContinuationRow);<a name="line.5670"></a>
-<span class="sourceLineNo">5671</span><a name="line.5671"></a>
-<span class="sourceLineNo">5672</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5672"></a>
-<span class="sourceLineNo">5673</span>        // We are done with this row, reset the continuation.<a name="line.5673"></a>
-<span class="sourceLineNo">5674</span>        joinedContinuationRow = null;<a name="line.5674"></a>
-<span class="sourceLineNo">5675</span>      }<a name="line.5675"></a>
-<span class="sourceLineNo">5676</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5676"></a>
-<span class="sourceLineNo">5677</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5677"></a>
-<span class="sourceLineNo">5678</span>      sort(results, comparator);<a name="line.5678"></a>
-<span class="sourceLineNo">5679</span>      return moreValues;<a name="line.5679"></a>
-<span class="sourceLineNo">5680</span>    }<a name="line.5680"></a>
-<span class="sourceLineNo">5681</span><a name="line.5681"></a>
-<span class="sourceLineNo">5682</span>    /**<a name="line.5682"></a>
-<span class="sourceLineNo">5683</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5683"></a>
-<span class="sourceLineNo">5684</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5684"></a>
-<span class="sourceLineNo">5685</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5685"></a>
-<span class="sourceLineNo">5686</span>     * @param scannerContext<a name="line.5686"></a>
-<span class="sourceLineNo">5687</span>     * @param currentRowCell<a name="line.5687"></a>
-<span class="sourceLineNo">5688</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5688"></a>
-<span class="sourceLineNo">5689</span>     */<a name="line.5689"></a>
-<span class="sourceLineNo">5690</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5690"></a>
-<span class="sourceLineNo">5691</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5691"></a>
-<span class="sourceLineNo">5692</span>      Cell nextKv;<a name="line.5692"></a>
-<span class="sourceLineNo">5693</span>      boolean moreCellsInRow = false;<a name="line.5693"></a>
-<span class="sourceLineNo">5694</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5694"></a>
-<span class="sourceLineNo">5695</span>      // Scanning between column families and thus the scope is between cells<a name="line.5695"></a>
-<span class="sourceLineNo">5696</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line.5696"></a>
-<span class="sourceLineNo">5697</span>      try {<a name="line.5697"></a>
-<span class="sourceLineNo">5698</span>        do {<a name="line.5698"></a>
-<span class="sourceLineNo">5699</span>          // We want to maintain any progress that is made towards the limits while scanning across<a name="line.5699"></a>
-<span class="sourceLineNo">5700</span>          // different column families. To do this, we toggle the keep progress flag on during calls<a name="line.5700"></a>
-<span class="sourceLineNo">5701</span>          // to the StoreScanner to ensure that any progress made thus far is not wiped away.<a name="line.5701"></a>
-<span class="sourceLineNo">5702</span>          scannerContext.setKeepProgress(true);<a name="line.5702"></a>
-<span class="sourceLineNo">5703</span>          heap.next(results, scannerContext);<a name="line.5703"></a>
-<span class="sourceLineNo">5704</span>          scannerContext.setKeepProgress(tmpKeepProgress);<a name="line.5704"></a>
-<span class="sourceLineNo">5705</span><a name="line.5705"></a>
-<span class="sourceLineNo">5706</span>          nextKv = heap.peek();<a name="line.5706"></a>
-<span class="sourceLineNo">5707</span>          moreCellsInRow = moreCellsInRow(nextKv, currentRowCell);<a name="line.5707"></a>
-<span class="sourceLineNo">5708</span>          if (!moreCellsInRow) incrementCountOfRowsScannedMetric(scannerContext);<a name="line.5708"></a>
-<span class="sourceLineNo">5709</span>          if (scannerContext.checkBatchLimit(limitScope)) {<a name="line.5709"></a>
-<span class="sourceLineNo">5710</span>            return scannerContext.setScannerState(NextState.BATCH_LIMIT_REACHED).hasMoreValues();<a name="line.5710"></a>
-<span class="sourceLineNo">5711</span>          } else if (scannerContext.checkSizeLimit(limitScope)) {<a name="line.5711"></a>
-<span class="sourceLineNo">5712</span>            ScannerContext.NextState state =<a name="line.5712"></a>
-<span class="sourceLineNo">5713</span>              moreCellsInRow? NextState.SIZE_LIMIT_REACHED_MID_ROW: NextState.SIZE_LIMIT_REACHED;<a name="line.5713"></a>
-<span class="sourceLineNo">5714</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5714"></a>
-<span class="sourceLineNo">5715</span>          } else if (scannerContext.checkTimeLimit(limitScope)) {<a name="line.5715"></a>
-<span class="sourceLineNo">5716</span>            ScannerContext.NextState state =<a name="line.5716"></a>
-<span class="sourceLineNo">5717</span>              moreCellsInRow? NextState.TIME_LIMIT_REACHED_MID_ROW: NextState.TIME_LIMIT_REACHED;<a name="line.5717"></a>
-<span class="sourceLineNo">5718</span>            return scannerContext.setScannerState(state).hasMoreValues();<a name="line.5718"></a>
-<span class="sourceLineNo">5719</span>          }<a name="line.5719"></a>
-<span class="sourceLineNo">5720</span>        } while (moreCellsInRow);<a name="line.5720"></a>
-<span class="sourceLineNo">5721</span>      } catch (FileNotFoundException e) {<a name="line.5721"></a>
-<span class="sourceLineNo">5722</span>        throw handleFileNotFound(e);<a name="line.5722"></a>
-<span class="sourceLineNo">5723</span>      }<a name="line.5723"></a>
-<span class="sourceLineNo">5724</span>      return nextKv != null;<a name="line.5724"></a>
-<span class="sourceLineNo">5725</span>    }<a name="line.5725"></a>
-<span class="sourceLineNo">5726</span><a name="line.5726"></a>
-<span class="sourceLineNo">5727</span>    /**<a name="line.5727"></a>
-<span class="sourceLineNo">5728</span>     * Based on the nextKv in the heap, and the current row, decide whether or not there are more<a name="line.5728"></a>
-<span class="sourceLineNo">5729</span>     * cells to be read in the heap. If the row of the nextKv in the heap matches the current row<a name="line.5729"></a>
-<span class="sourceLineNo">5730</span>     * then there are more cells to be read in the row.<a name="line.5730"></a>
-<span class="sourceLineNo">5731</span>     * @param nextKv<a name="line.5731"></a>
-<span class="sourceLineNo">5732</span>     * @param currentRowCell<a name="line.5732"></a>
-<span class="sourceLineNo">5733</span>     * @return true When there are more cells in the row to be read<a name="line.5733"></a>
-<span class="sourceLineNo">5734</span>     */<a name="line.5734"></a>
-<span class="sourceLineNo">5735</span>    private boolean moreCellsInRow(final Cell nextKv, Cell currentRowCell) {<a name="line.5735"></a>
-<span class="sourceLineNo">5736</span>      return nextKv != null &amp;&amp; CellUtil.matchingRow(nextKv, currentRowCell);<a name="line.5736"></a>
-<span class="sourceLineNo">5737</span>    }<a name="line.5737"></a>
-<span class="sourceLineNo">5738</span><a name="line.5738"></a>
-<span class="sourceLineNo">5739</span>    /*<a name="line.5739"></a>
-<span class="sourceLineNo">5740</span>     * @return True if a filter rules the scanner is over, done.<a name="line.5740"></a>
-<span class="sourceLineNo">5741</span>     */<a name="line.5741"></a>
-<span class="sourceLineNo">5742</span>    @Override<a name="line.5742"></a>
-<span class="sourceLineNo">5743</span>    public synchronized boolean isFilterDone() throws IOException {<a name="line.5743"></a>
-<span class="sourceLineNo">5744</span>      return isFilterDoneInternal();<a name="line.5744"></a>
-<span class="sourceLineNo">5745</span>    }<a name="line.5745"></a>
-<span class="sourceLineNo">5746</span><a name="line.5746"></a>
-<span class="sourceLineNo">5747</span>    private boolean isFilterDoneInternal() throws IOException {<a name="line.5747"></a>
-<span class="sourceLineNo">5748</span>      return this.filter != null &amp;&amp; this.filter.filterAllRemaining();<a name="line.5748"></a>
-<span class="sourceLineNo">5749</span>    }<a name="line.5749"></a>
-<span class="sourceLineNo">5750</span><a name="line.5750"></a>
-<span class="sourceLineNo">5751</span>    private boolean nextInternal(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5751"></a>
-<span class="sourceLineNo">5752</span>        throws IOException {<a name="line.5752"></a>
-<span class="sourceLineNo">5753</span>      if (!results.isEmpty()) {<a name="line.5753"></a>
-<span class="sourceLineNo">5754</span>        throw new IllegalArgumentException("First parameter should be an empty list");<a name="line.5754"></a>
-<span class="sourceLineNo">5755</span>      }<a name="line.5755"></a>
-<span class="sourceLineNo">5756</span>      if (scannerContext == null) {<a name="line.5756"></a>
-<span class="sourceLineNo">5757</span>        throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.5757"></a>
+<span class="sourceLineNo">5300</span>    boolean isSuccessful = false;<a name="line.5300"></a>
+<span class="sourceLineNo">5301</span>    try {<a name="line.5301"></a>
+<span class="sourceLineNo">5302</span>      this.writeRequestsCount.increment();<a name="line.5302"></a>
+<span class="sourceLineNo">5303</span><a name="line.5303"></a>
+<span class="sourceLineNo">5304</span>      // There possibly was a split that happened between when the split keys<a name="line.5304"></a>
+<span class="sourceLineNo">5305</span>      // were gathered and before the HRegion's write lock was taken.  We need<a name="line.5305"></a>
+<span class="sourceLineNo">5306</span>      // to validate the HFile region before attempting to bulk load all of them<a name="line.5306"></a>
+<span class="sourceLineNo">5307</span>      List&lt;IOException&gt; ioes = new ArrayList&lt;IOException&gt;();<a name="line.5307"></a>
+<span class="sourceLineNo">5308</span>      List&lt;Pair&lt;byte[], String&gt;&gt; failures = new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;();<a name="line.5308"></a>
+<span class="sourceLineNo">5309</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5309"></a>
+<span class="sourceLineNo">5310</span>        byte[] familyName = p.getFirst();<a name="line.5310"></a>
+<span class="sourceLineNo">5311</span>        String path = p.getSecond();<a name="line.5311"></a>
+<span class="sourceLineNo">5312</span><a name="line.5312"></a>
+<span class="sourceLineNo">5313</span>        Store store = getStore(familyName);<a name="line.5313"></a>
+<span class="sourceLineNo">5314</span>        if (store == null) {<a name="line.5314"></a>
+<span class="sourceLineNo">5315</span>          IOException ioe = new org.apache.hadoop.hbase.DoNotRetryIOException(<a name="line.5315"></a>
+<span class="sourceLineNo">5316</span>              "No such column family " + Bytes.toStringBinary(familyName));<a name="line.5316"></a>
+<span class="sourceLineNo">5317</span>          ioes.add(ioe);<a name="line.5317"></a>
+<span class="sourceLineNo">5318</span>        } else {<a name="line.5318"></a>
+<span class="sourceLineNo">5319</span>          try {<a name="line.5319"></a>
+<span class="sourceLineNo">5320</span>            store.assertBulkLoadHFileOk(new Path(path));<a name="line.5320"></a>
+<span class="sourceLineNo">5321</span>          } catch (WrongRegionException wre) {<a name="line.5321"></a>
+<span class="sourceLineNo">5322</span>            // recoverable (file doesn't fit in region)<a name="line.5322"></a>
+<span class="sourceLineNo">5323</span>            failures.add(p);<a name="line.5323"></a>
+<span class="sourceLineNo">5324</span>          } catch (IOException ioe) {<a name="line.5324"></a>
+<span class="sourceLineNo">5325</span>            // unrecoverable (hdfs problem)<a name="line.5325"></a>
+<span class="sourceLineNo">5326</span>            ioes.add(ioe);<a name="line.5326"></a>
+<span class="sourceLineNo">5327</span>          }<a name="line.5327"></a>
+<span class="sourceLineNo">5328</span>        }<a name="line.5328"></a>
+<span class="sourceLineNo">5329</span>      }<a name="line.5329"></a>
+<span class="sourceLineNo">5330</span><a name="line.5330"></a>
+<span class="sourceLineNo">5331</span>      // validation failed because of some sort of IO problem.<a name="line.5331"></a>
+<span class="sourceLineNo">5332</span>      if (ioes.size() != 0) {<a name="line.5332"></a>
+<span class="sourceLineNo">5333</span>        IOException e = MultipleIOException.createIOException(ioes);<a name="line.5333"></a>
+<span class="sourceLineNo">5334</span>        LOG.error("There were one or more IO errors when checking if the bulk load is ok.", e);<a name="line.5334"></a>
+<span class="sourceLineNo">5335</span>        throw e;<a name="line.5335"></a>
+<span class="sourceLineNo">5336</span>      }<a name="line.5336"></a>
+<span class="sourceLineNo">5337</span><a name="line.5337"></a>
+<span class="sourceLineNo">5338</span>      // validation failed, bail out before doing anything permanent.<a name="line.5338"></a>
+<span class="sourceLineNo">5339</span>      if (failures.size() != 0) {<a name="line.5339"></a>
+<span class="sourceLineNo">5340</span>        StringBuilder list = new StringBuilder();<a name="line.5340"></a>
+<span class="sourceLineNo">5341</span>        for (Pair&lt;byte[], String&gt; p : failures) {<a name="line.5341"></a>
+<span class="sourceLineNo">5342</span>          list.append("\n").append(Bytes.toString(p.getFirst())).append(" : ")<a name="line.5342"></a>
+<span class="sourceLineNo">5343</span>              .append(p.getSecond());<a name="line.5343"></a>
+<span class="sourceLineNo">5344</span>        }<a name="line.5344"></a>
+<span class="sourceLineNo">5345</span>        // problem when validating<a name="line.5345"></a>
+<span class="sourceLineNo">5346</span>        LOG.warn("There was a recoverable bulk load failure likely due to a" +<a name="line.5346"></a>
+<span class="sourceLineNo">5347</span>            " split.  These (family, HFile) pairs were not loaded: " + list);<a name="line.5347"></a>
+<span class="sourceLineNo">5348</span>        return isSuccessful;<a name="line.5348"></a>
+<span class="sourceLineNo">5349</span>      }<a name="line.5349"></a>
+<span class="sourceLineNo">5350</span><a name="line.5350"></a>
+<span class="sourceLineNo">5351</span>      // We need to assign a sequential ID that's in between two memstores in order to preserve<a name="line.5351"></a>
+<span class="sourceLineNo">5352</span>      // the guarantee that all the edits lower than the highest sequential ID from all the<a name="line.5352"></a>
+<span class="sourceLineNo">5353</span>      // HFiles are flushed on disk. See HBASE-10958.  The sequence id returned when we flush is<a name="line.5353"></a>
+<span class="sourceLineNo">5354</span>      // guaranteed to be one beyond the file made when we flushed (or if nothing to flush, it is<a name="line.5354"></a>
+<span class="sourceLineNo">5355</span>      // a sequence id that we can be sure is beyond the last hfile written).<a name="line.5355"></a>
+<span class="sourceLineNo">5356</span>      if (assignSeqId) {<a name="line.5356"></a>
+<span class="sourceLineNo">5357</span>        FlushResult fs = flushcache(true, false);<a name="line.5357"></a>
+<span class="sourceLineNo">5358</span>        if (fs.isFlushSucceeded()) {<a name="line.5358"></a>
+<span class="sourceLineNo">5359</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5359"></a>
+<span class="sourceLineNo">5360</span>        } else if (fs.getResult() == FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY) {<a name="line.5360"></a>
+<span class="sourceLineNo">5361</span>          seqId = ((FlushResultImpl)fs).flushSequenceId;<a name="line.5361"></a>
+<span class="sourceLineNo">5362</span>        } else {<a name="line.5362"></a>
+<span class="sourceLineNo">5363</span>          throw new IOException("Could not bulk load with an assigned sequential ID because the "+<a name="line.5363"></a>
+<span class="sourceLineNo">5364</span>            "flush didn't run. Reason for not flushing: " + ((FlushResultImpl)fs).failureReason);<a name="line.5364"></a>
+<span class="sourceLineNo">5365</span>        }<a name="line.5365"></a>
+<span class="sourceLineNo">5366</span>      }<a name="line.5366"></a>
+<span class="sourceLineNo">5367</span><a name="line.5367"></a>
+<span class="sourceLineNo">5368</span>      for (Pair&lt;byte[], String&gt; p : familyPaths) {<a name="line.5368"></a>
+<span class="sourceLineNo">5369</span>        byte[] familyName = p.getFirst();<a name="line.5369"></a>
+<span class="sourceLineNo">5370</span>        String path = p.getSecond();<a name="line.5370"></a>
+<span class="sourceLineNo">5371</span>        Store store = getStore(familyName);<a name="line.5371"></a>
+<span class="sourceLineNo">5372</span>        try {<a name="line.5372"></a>
+<span class="sourceLineNo">5373</span>          String finalPath = path;<a name="line.5373"></a>
+<span class="sourceLineNo">5374</span>          if (bulkLoadListener != null) {<a name="line.5374"></a>
+<span class="sourceLineNo">5375</span>            finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);<a name="line.5375"></a>
+<span class="sourceLineNo">5376</span>          }<a name="line.5376"></a>
+<span class="sourceLineNo">5377</span>          Path commitedStoreFile = store.bulkLoadHFile(finalPath, seqId);<a name="line.5377"></a>
+<span class="sourceLineNo">5378</span><a name="line.5378"></a>
+<span class="sourceLineNo">5379</span>          if(storeFiles.containsKey(familyName)) {<a name="line.5379"></a>
+<span class="sourceLineNo">5380</span>            storeFiles.get(familyName).add(commitedStoreFile);<a name="line.5380"></a>
+<span class="sourceLineNo">5381</span>          } else {<a name="line.5381"></a>
+<span class="sourceLineNo">5382</span>            List&lt;Path&gt; storeFileNames = new ArrayList&lt;Path&gt;();<a name="line.5382"></a>
+<span class="sourceLineNo">5383</span>            storeFileNames.add(commitedStoreFile);<a name="line.5383"></a>
+<span class="sourceLineNo">5384</span>            storeFiles.put(familyName, storeFileNames);<a name="line.5384"></a>
+<span class="sourceLineNo">5385</span>          }<a name="line.5385"></a>
+<span class="sourceLineNo">5386</span>          if (bulkLoadListener != null) {<a name="line.5386"></a>
+<span class="sourceLineNo">5387</span>            bulkLoadListener.doneBulkLoad(familyName, path);<a name="line.5387"></a>
+<span class="sourceLineNo">5388</span>          }<a name="line.5388"></a>
+<span class="sourceLineNo">5389</span>        } catch (IOException ioe) {<a name="line.5389"></a>
+<span class="sourceLineNo">5390</span>          // A failure here can cause an atomicity violation that we currently<a name="line.5390"></a>
+<span class="sourceLineNo">5391</span>          // cannot recover from since it is likely a failed HDFS operation.<a name="line.5391"></a>
+<span class="sourceLineNo">5392</span><a name="line.5392"></a>
+<span class="sourceLineNo">5393</span>          // TODO Need a better story for reverting partial failures due to HDFS.<a name="line.5393"></a>
+<span class="sourceLineNo">5394</span>          LOG.error("There was a partial failure due to IO when attempting to" +<a name="line.5394"></a>
+<span class="sourceLineNo">5395</span>              " load " + Bytes.toString(p.getFirst()) + " : " + p.getSecond(), ioe);<a name="line.5395"></a>
+<span class="sourceLineNo">5396</span>          if (bulkLoadListener != null) {<a name="line.5396"></a>
+<span class="sourceLineNo">5397</span>            try {<a name="line.5397"></a>
+<span class="sourceLineNo">5398</span>              bulkLoadListener.failedBulkLoad(familyName, path);<a name="line.5398"></a>
+<span class="sourceLineNo">5399</span>            } catch (Exception ex) {<a name="line.5399"></a>
+<span class="sourceLineNo">5400</span>              LOG.error("Error while calling failedBulkLoad for family " +<a name="line.5400"></a>
+<span class="sourceLineNo">5401</span>                  Bytes.toString(familyName) + " with path " + path, ex);<a name="line.5401"></a>
+<span class="sourceLineNo">5402</span>            }<a name="line.5402"></a>
+<span class="sourceLineNo">5403</span>          }<a name="line.5403"></a>
+<span class="sourceLineNo">5404</span>          throw ioe;<a name="line.5404"></a>
+<span class="sourceLineNo">5405</span>        }<a name="line.5405"></a>
+<span class="sourceLineNo">5406</span>      }<a name="line.5406"></a>
+<span class="sourceLineNo">5407</span><a name="line.5407"></a>
+<span class="sourceLineNo">5408</span>      isSuccessful = true;<a name="line.5408"></a>
+<span class="sourceLineNo">5409</span>    } finally {<a name="line.5409"></a>
+<span class="sourceLineNo">5410</span>      if (wal != null &amp;&amp; !storeFiles.isEmpty()) {<a name="line.5410"></a>
+<span class="sourceLineNo">5411</span>        // Write a bulk load event for hfiles that are loaded<a name="line.5411"></a>
+<span class="sourceLineNo">5412</span>        try {<a name="line.5412"></a>
+<span class="sourceLineNo">5413</span>          WALProtos.BulkLoadDescriptor loadDescriptor = ProtobufUtil.toBulkLoadDescriptor(<a name="line.5413"></a>
+<span class="sourceLineNo">5414</span>              this.getRegionInfo().getTable(),<a name="line.5414"></a>
+<span class="sourceLineNo">5415</span>              ByteStringer.wrap(this.getRegionInfo().getEncodedNameAsBytes()), storeFiles, seqId);<a name="line.5415"></a>
+<span class="sourceLineNo">5416</span>          WALUtil.writeBulkLoadMarkerAndSync(this.wal, this.getReplicationScope(), getRegionInfo(),<a name="line.5416"></a>
+<span class="sourceLineNo">5417</span>              loadDescriptor, mvcc);<a name="line.5417"></a>
+<span class="sourceLineNo">5418</span>        } catch (IOException ioe) {<a name="line.5418"></a>
+<span class="sourceLineNo">5419</span>          if (this.rsServices != null) {<a name="line.5419"></a>
+<span class="sourceLineNo">5420</span>            // Have to abort region server because some hfiles has been loaded but we can't write<a name="line.5420"></a>
+<span class="sourceLineNo">5421</span>            // the event into WAL<a name="line.5421"></a>
+<span class="sourceLineNo">5422</span>            isSuccessful = false;<a name="line.5422"></a>
+<span class="sourceLineNo">5423</span>            this.rsServices.abort("Failed to write bulk load event into WAL.", ioe);<a name="line.5423"></a>
+<span class="sourceLineNo">5424</span>          }<a name="line.5424"></a>
+<span class="sourceLineNo">5425</span>        }<a name="line.5425"></a>
+<span class="sourceLineNo">5426</span>      }<a name="line.5426"></a>
+<span class="sourceLineNo">5427</span><a name="line.5427"></a>
+<span class="sourceLineNo">5428</span>      closeBulkRegionOperation();<a name="line.5428"></a>
+<span class="sourceLineNo">5429</span>    }<a name="line.5429"></a>
+<span class="sourceLineNo">5430</span>    return isSuccessful;<a name="line.5430"></a>
+<span class="sourceLineNo">5431</span>  }<a name="line.5431"></a>
+<span class="sourceLineNo">5432</span><a name="line.5432"></a>
+<span class="sourceLineNo">5433</span>  @Override<a name="line.5433"></a>
+<span class="sourceLineNo">5434</span>  public boolean equals(Object o) {<a name="line.5434"></a>
+<span class="sourceLineNo">5435</span>    return o instanceof HRegion &amp;&amp; Bytes.equals(getRegionInfo().getRegionName(),<a name="line.5435"></a>
+<span class="sourceLineNo">5436</span>                                                ((HRegion) o).getRegionInfo().getRegionName());<a name="line.5436"></a>
+<span class="sourceLineNo">5437</span>  }<a name="line.5437"></a>
+<span class="sourceLineNo">5438</span><a name="line.5438"></a>
+<span class="sourceLineNo">5439</span>  @Override<a name="line.5439"></a>
+<span class="sourceLineNo">5440</span>  public int hashCode() {<a name="line.5440"></a>
+<span class="sourceLineNo">5441</span>    return Bytes.hashCode(getRegionInfo().getRegionName());<a name="line.5441"></a>
+<span class="sourceLineNo">5442</span>  }<a name="line.5442"></a>
+<span class="sourceLineNo">5443</span><a name="line.5443"></a>
+<span class="sourceLineNo">5444</span>  @Override<a name="line.5444"></a>
+<span class="sourceLineNo">5445</span>  public String toString() {<a name="line.5445"></a>
+<span class="sourceLineNo">5446</span>    return getRegionInfo().getRegionNameAsString();<a name="line.5446"></a>
+<span class="sourceLineNo">5447</span>  }<a name="line.5447"></a>
+<span class="sourceLineNo">5448</span><a name="line.5448"></a>
+<span class="sourceLineNo">5449</span>  /**<a name="line.5449"></a>
+<span class="sourceLineNo">5450</span>   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).<a name="line.5450"></a>
+<span class="sourceLineNo">5451</span>   */<a name="line.5451"></a>
+<span class="sourceLineNo">5452</span>  class RegionScannerImpl implements RegionScanner, org.apache.hadoop.hbase.ipc.RpcCallback {<a name="line.5452"></a>
+<span class="sourceLineNo">5453</span>    // Package local for testability<a name="line.5453"></a>
+<span class="sourceLineNo">5454</span>    KeyValueHeap storeHeap = null;<a name="line.5454"></a>
+<span class="sourceLineNo">5455</span>    /** Heap of key-values that are not essential for the provided filters and are thus read<a name="line.5455"></a>
+<span class="sourceLineNo">5456</span>     * on demand, if on-demand column family loading is enabled.*/<a name="line.5456"></a>
+<span class="sourceLineNo">5457</span>    KeyValueHeap joinedHeap = null;<a name="line.5457"></a>
+<span class="sourceLineNo">5458</span>    /**<a name="line.5458"></a>
+<span class="sourceLineNo">5459</span>     * If the joined heap data gathering is interrupted due to scan limits, this will<a name="line.5459"></a>
+<span class="sourceLineNo">5460</span>     * contain the row for which we are populating the values.*/<a name="line.5460"></a>
+<span class="sourceLineNo">5461</span>    protected Cell joinedContinuationRow = null;<a name="line.5461"></a>
+<span class="sourceLineNo">5462</span>    private boolean filterClosed = false;<a name="line.5462"></a>
+<span class="sourceLineNo">5463</span><a name="line.5463"></a>
+<span class="sourceLineNo">5464</span>    protected final int isScan;<a name="line.5464"></a>
+<span class="sourceLineNo">5465</span>    protected final byte[] stopRow;<a name="line.5465"></a>
+<span class="sourceLineNo">5466</span>    protected final HRegion region;<a name="line.5466"></a>
+<span class="sourceLineNo">5467</span>    protected final CellComparator comparator;<a name="line.5467"></a>
+<span class="sourceLineNo">5468</span>    protected boolean copyCellsFromSharedMem = false;<a name="line.5468"></a>
+<span class="sourceLineNo">5469</span><a name="line.5469"></a>
+<span class="sourceLineNo">5470</span>    private final long readPt;<a name="line.5470"></a>
+<span class="sourceLineNo">5471</span>    private final long maxResultSize;<a name="line.5471"></a>
+<span class="sourceLineNo">5472</span>    private final ScannerContext defaultScannerContext;<a name="line.5472"></a>
+<span class="sourceLineNo">5473</span>    private final FilterWrapper filter;<a name="line.5473"></a>
+<span class="sourceLineNo">5474</span><a name="line.5474"></a>
+<span class="sourceLineNo">5475</span>    @Override<a name="line.5475"></a>
+<span class="sourceLineNo">5476</span>    public HRegionInfo getRegionInfo() {<a name="line.5476"></a>
+<span class="sourceLineNo">5477</span>      return region.getRegionInfo();<a name="line.5477"></a>
+<span class="sourceLineNo">5478</span>    }<a name="line.5478"></a>
+<span class="sourceLineNo">5479</span><a name="line.5479"></a>
+<span class="sourceLineNo">5480</span>    public void setCopyCellsFromSharedMem(boolean copyCells) {<a name="line.5480"></a>
+<span class="sourceLineNo">5481</span>      this.copyCellsFromSharedMem = copyCells;<a name="line.5481"></a>
+<span class="sourceLineNo">5482</span>    }<a name="line.5482"></a>
+<span class="sourceLineNo">5483</span><a name="line.5483"></a>
+<span class="sourceLineNo">5484</span>    RegionScannerImpl(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners, HRegion region,<a name="line.5484"></a>
+<span class="sourceLineNo">5485</span>        boolean copyCellsFromSharedMem)<a name="line.5485"></a>
+<span class="sourceLineNo">5486</span>        throws IOException {<a name="line.5486"></a>
+<span class="sourceLineNo">5487</span>      this.region = region;<a name="line.5487"></a>
+<span class="sourceLineNo">5488</span>      this.maxResultSize = scan.getMaxResultSize();<a name="line.5488"></a>
+<span class="sourceLineNo">5489</span>      if (scan.hasFilter()) {<a name="line.5489"></a>
+<span class="sourceLineNo">5490</span>        this.filter = new FilterWrapper(scan.getFilter());<a name="line.5490"></a>
+<span class="sourceLineNo">5491</span>      } else {<a name="line.5491"></a>
+<span class="sourceLineNo">5492</span>        this.filter = null;<a name="line.5492"></a>
+<span class="sourceLineNo">5493</span>      }<a name="line.5493"></a>
+<span class="sourceLineNo">5494</span>      this.comparator = region.getCellCompartor();<a name="line.5494"></a>
+<span class="sourceLineNo">5495</span>      /**<a name="line.5495"></a>
+<span class="sourceLineNo">5496</span>       * By default, calls to next/nextRaw must enforce the batch limit. Thus, construct a default<a name="line.5496"></a>
+<span class="sourceLineNo">5497</span>       * scanner context that can be used to enforce the batch limit in the event that a<a name="line.5497"></a>
+<span class="sourceLineNo">5498</span>       * ScannerContext is not specified during an invocation of next/nextRaw<a name="line.5498"></a>
+<span class="sourceLineNo">5499</span>       */<a name="line.5499"></a>
+<span class="sourceLineNo">5500</span>      defaultScannerContext = ScannerContext.newBuilder()<a name="line.5500"></a>
+<span class="sourceLineNo">5501</span>          .setBatchLimit(scan.getBatch()).build();<a name="line.5501"></a>
+<span class="sourceLineNo">5502</span><a name="line.5502"></a>
+<span class="sourceLineNo">5503</span>      if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {<a name="line.5503"></a>
+<span class="sourceLineNo">5504</span>        this.stopRow = null;<a name="line.5504"></a>
+<span class="sourceLineNo">5505</span>      } else {<a name="line.5505"></a>
+<span class="sourceLineNo">5506</span>        this.stopRow = scan.getStopRow();<a name="line.5506"></a>
+<span class="sourceLineNo">5507</span>      }<a name="line.5507"></a>
+<span class="sourceLineNo">5508</span>      // If we are doing a get, we want to be [startRow,endRow]. Normally<a name="line.5508"></a>
+<span class="sourceLineNo">5509</span>      // it is [startRow,endRow) and if startRow=endRow we get nothing.<a name="line.5509"></a>
+<span class="sourceLineNo">5510</span>      this.isScan = scan.isGetScan() ? 1 : 0;<a name="line.5510"></a>
+<span class="sourceLineNo">5511</span><a name="line.5511"></a>
+<span class="sourceLineNo">5512</span>      // synchronize on scannerReadPoints so that nobody calculates<a name="line.5512"></a>
+<span class="sourceLineNo">5513</span>      // getSmallestReadPoint, before scannerReadPoints is updated.<a name="line.5513"></a>
+<span class="sourceLineNo">5514</span>      IsolationLevel isolationLevel = scan.getIsolationLevel();<a name="line.5514"></a>
+<span class="sourceLineNo">5515</span>      synchronized(scannerReadPoints) {<a name="line.5515"></a>
+<span class="sourceLineNo">5516</span>        this.readPt = getReadPoint(isolationLevel);<a name="line.5516"></a>
+<span class="sourceLineNo">5517</span>        scannerReadPoints.put(this, this.readPt);<a name="line.5517"></a>
+<span class="sourceLineNo">5518</span>      }<a name="line.5518"></a>
+<span class="sourceLineNo">5519</span><a name="line.5519"></a>
+<span class="sourceLineNo">5520</span>      // Here we separate all scanners into two lists - scanner that provide data required<a name="line.5520"></a>
+<span class="sourceLineNo">5521</span>      // by the filter to operate (scanners list) and all others (joinedScanners list).<a name="line.5521"></a>
+<span class="sourceLineNo">5522</span>      List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5522"></a>
+<span class="sourceLineNo">5523</span>      List&lt;KeyValueScanner&gt; joinedScanners<a name="line.5523"></a>
+<span class="sourceLineNo">5524</span>        = new ArrayList&lt;KeyValueScanner&gt;(scan.getFamilyMap().size());<a name="line.5524"></a>
+<span class="sourceLineNo">5525</span>      if (additionalScanners != null) {<a name="line.5525"></a>
+<span class="sourceLineNo">5526</span>        scanners.addAll(additionalScanners);<a name="line.5526"></a>
+<span class="sourceLineNo">5527</span>      }<a name="line.5527"></a>
+<span class="sourceLineNo">5528</span><a name="line.5528"></a>
+<span class="sourceLineNo">5529</span>      for (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry : scan.getFamilyMap().entrySet()) {<a name="line.5529"></a>
+<span class="sourceLineNo">5530</span>        Store store = stores.get(entry.getKey());<a name="line.5530"></a>
+<span class="sourceLineNo">5531</span>        KeyValueScanner scanner;<a name="line.5531"></a>
+<span class="sourceLineNo">5532</span>        try {<a name="line.5532"></a>
+<span class="sourceLineNo">5533</span>          scanner = store.getScanner(scan, entry.getValue(), this.readPt);<a name="line.5533"></a>
+<span class="sourceLineNo">5534</span>        } catch (FileNotFoundException e) {<a name="line.5534"></a>
+<span class="sourceLineNo">5535</span>          throw handleFileNotFound(e);<a name="line.5535"></a>
+<span class="sourceLineNo">5536</span>        }<a name="line.5536"></a>
+<span class="sourceLineNo">5537</span>        if (this.filter == null || !scan.doLoadColumnFamiliesOnDemand()<a name="line.5537"></a>
+<span class="sourceLineNo">5538</span>          || this.filter.isFamilyEssential(entry.getKey())) {<a name="line.5538"></a>
+<span class="sourceLineNo">5539</span>          scanners.add(scanner);<a name="line.5539"></a>
+<span class="sourceLineNo">5540</span>        } else {<a name="line.5540"></a>
+<span class="sourceLineNo">5541</span>          joinedScanners.add(scanner);<a name="line.5541"></a>
+<span class="sourceLineNo">5542</span>        }<a name="line.5542"></a>
+<span class="sourceLineNo">5543</span>      }<a name="line.5543"></a>
+<span class="sourceLineNo">5544</span>      this.copyCellsFromSharedMem = copyCellsFromSharedMem;<a name="line.5544"></a>
+<span class="sourceLineNo">5545</span>      initializeKVHeap(scanners, joinedScanners, region);<a name="line.5545"></a>
+<span class="sourceLineNo">5546</span>    }<a name="line.5546"></a>
+<span class="sourceLineNo">5547</span><a name="line.5547"></a>
+<span class="sourceLineNo">5548</span>    protected void initializeKVHeap(List&lt;KeyValueScanner&gt; scanners,<a name="line.5548"></a>
+<span class="sourceLineNo">5549</span>        List&lt;KeyValueScanner&gt; joinedScanners, HRegion region)<a name="line.5549"></a>
+<span class="sourceLineNo">5550</span>        throws IOException {<a name="line.5550"></a>
+<span class="sourceLineNo">5551</span>      this.storeHeap = new KeyValueHeap(scanners, comparator);<a name="line.5551"></a>
+<span class="sourceLineNo">5552</span>      if (!joinedScanners.isEmpty()) {<a name="line.5552"></a>
+<span class="sourceLineNo">5553</span>        this.joinedHeap = new KeyValueHeap(joinedScanners, comparator);<a name="line.5553"></a>
+<span class="sourceLineNo">5554</span>      }<a name="line.5554"></a>
+<span class="sourceLineNo">5555</span>    }<a name="line.5555"></a>
+<span class="sourceLineNo">5556</span><a name="line.5556"></a>
+<span class="sourceLineNo">5557</span>    @Override<a name="line.5557"></a>
+<span class="sourceLineNo">5558</span>    public long getMaxResultSize() {<a name="line.5558"></a>
+<span class="sourceLineNo">5559</span>      return maxResultSize;<a name="line.5559"></a>
+<span class="sourceLineNo">5560</span>    }<a name="line.5560"></a>
+<span class="sourceLineNo">5561</span><a name="line.5561"></a>
+<span class="sourceLineNo">5562</span>    @Override<a name="line.5562"></a>
+<span class="sourceLineNo">5563</span>    public long getMvccReadPoint() {<a name="line.5563"></a>
+<span class="sourceLineNo">5564</span>      return this.readPt;<a name="line.5564"></a>
+<span class="sourceLineNo">5565</span>    }<a name="line.5565"></a>
+<span class="sourceLineNo">5566</span><a name="line.5566"></a>
+<span class="sourceLineNo">5567</span>    @Override<a name="line.5567"></a>
+<span class="sourceLineNo">5568</span>    public int getBatch() {<a name="line.5568"></a>
+<span class="sourceLineNo">5569</span>      return this.defaultScannerContext.getBatchLimit();<a name="line.5569"></a>
+<span class="sourceLineNo">5570</span>    }<a name="line.5570"></a>
+<span class="sourceLineNo">5571</span><a name="line.5571"></a>
+<span class="sourceLineNo">5572</span>    /**<a name="line.5572"></a>
+<span class="sourceLineNo">5573</span>     * Reset both the filter and the old filter.<a name="line.5573"></a>
+<span class="sourceLineNo">5574</span>     *<a name="line.5574"></a>
+<span class="sourceLineNo">5575</span>     * @throws IOException in case a filter raises an I/O exception.<a name="line.5575"></a>
+<span class="sourceLineNo">5576</span>     */<a name="line.5576"></a>
+<span class="sourceLineNo">5577</span>    protected void resetFilters() throws IOException {<a name="line.5577"></a>
+<span class="sourceLineNo">5578</span>      if (filter != null) {<a name="line.5578"></a>
+<span class="sourceLineNo">5579</span>        filter.reset();<a name="line.5579"></a>
+<span class="sourceLineNo">5580</span>      }<a name="line.5580"></a>
+<span class="sourceLineNo">5581</span>    }<a name="line.5581"></a>
+<span class="sourceLineNo">5582</span><a name="line.5582"></a>
+<span class="sourceLineNo">5583</span>    @Override<a name="line.5583"></a>
+<span class="sourceLineNo">5584</span>    public boolean next(List&lt;Cell&gt; outResults)<a name="line.5584"></a>
+<span class="sourceLineNo">5585</span>        throws IOException {<a name="line.5585"></a>
+<span class="sourceLineNo">5586</span>      // apply the batching limit by default<a name="line.5586"></a>
+<span class="sourceLineNo">5587</span>      return next(outResults, defaultScannerContext);<a name="line.5587"></a>
+<span class="sourceLineNo">5588</span>    }<a name="line.5588"></a>
+<span class="sourceLineNo">5589</span><a name="line.5589"></a>
+<span class="sourceLineNo">5590</span>    @Override<a name="line.5590"></a>
+<span class="sourceLineNo">5591</span>    public synchronized boolean next(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5591"></a>
+<span class="sourceLineNo">5592</span>    throws IOException {<a name="line.5592"></a>
+<span class="sourceLineNo">5593</span>      if (this.filterClosed) {<a name="line.5593"></a>
+<span class="sourceLineNo">5594</span>        throw new UnknownScannerException("Scanner was closed (timed out?) " +<a name="line.5594"></a>
+<span class="sourceLineNo">5595</span>            "after we renewed it. Could be caused by a very slow scanner " +<a name="line.5595"></a>
+<span class="sourceLineNo">5596</span>            "or a lengthy garbage collection");<a name="line.5596"></a>
+<span class="sourceLineNo">5597</span>      }<a name="line.5597"></a>
+<span class="sourceLineNo">5598</span>      startRegionOperation(Operation.SCAN);<a name="line.5598"></a>
+<span class="sourceLineNo">5599</span>      readRequestsCount.increment();<a name="line.5599"></a>
+<span class="sourceLineNo">5600</span>      try {<a name="line.5600"></a>
+<span class="sourceLineNo">5601</span>        return nextRaw(outResults, scannerContext);<a name="line.5601"></a>
+<span class="sourceLineNo">5602</span>      } finally {<a name="line.5602"></a>
+<span class="sourceLineNo">5603</span>        closeRegionOperation(Operation.SCAN);<a name="line.5603"></a>
+<span class="sourceLineNo">5604</span>      }<a name="line.5604"></a>
+<span class="sourceLineNo">5605</span>    }<a name="line.5605"></a>
+<span class="sourceLineNo">5606</span><a name="line.5606"></a>
+<span class="sourceLineNo">5607</span>    @Override<a name="line.5607"></a>
+<span class="sourceLineNo">5608</span>    public boolean nextRaw(List&lt;Cell&gt; outResults) throws IOException {<a name="line.5608"></a>
+<span class="sourceLineNo">5609</span>      // Use the RegionScanner's context by default<a name="line.5609"></a>
+<span class="sourceLineNo">5610</span>      return nextRaw(outResults, defaultScannerContext);<a name="line.5610"></a>
+<span class="sourceLineNo">5611</span>    }<a name="line.5611"></a>
+<span class="sourceLineNo">5612</span><a name="line.5612"></a>
+<span class="sourceLineNo">5613</span>    @Override<a name="line.5613"></a>
+<span class="sourceLineNo">5614</span>    public boolean nextRaw(List&lt;Cell&gt; outResults, ScannerContext scannerContext)<a name="line.5614"></a>
+<span class="sourceLineNo">5615</span>        throws IOException {<a name="line.5615"></a>
+<span class="sourceLineNo">5616</span>      if (storeHeap == null) {<a name="line.5616"></a>
+<span class="sourceLineNo">5617</span>        // scanner is closed<a name="line.5617"></a>
+<span class="sourceLineNo">5618</span>        throw new UnknownScannerException("Scanner was closed");<a name="line.5618"></a>
+<span class="sourceLineNo">5619</span>      }<a name="line.5619"></a>
+<span class="sourceLineNo">5620</span>      boolean moreValues = false;<a name="line.5620"></a>
+<span class="sourceLineNo">5621</span>      try {<a name="line.5621"></a>
+<span class="sourceLineNo">5622</span>        if (outResults.isEmpty()) {<a name="line.5622"></a>
+<span class="sourceLineNo">5623</span>          // Usually outResults is empty. This is true when next is called<a name="line.5623"></a>
+<span class="sourceLineNo">5624</span>          // to handle scan or get operation.<a name="line.5624"></a>
+<span class="sourceLineNo">5625</span>          moreValues = nextInternal(outResults, scannerContext);<a name="line.5625"></a>
+<span class="sourceLineNo">5626</span>        } else {<a name="line.5626"></a>
+<span class="sourceLineNo">5627</span>          List&lt;Cell&gt; tmpList = new ArrayList&lt;Cell&gt;();<a name="line.5627"></a>
+<span class="sourceLineNo">5628</span>          moreValues = nextInternal(tmpList, scannerContext);<a name="line.5628"></a>
+<span class="sourceLineNo">5629</span>          outResults.addAll(tmpList);<a name="line.5629"></a>
+<span class="sourceLineNo">5630</span>        }<a name="line.5630"></a>
+<span class="sourceLineNo">5631</span><a name="line.5631"></a>
+<span class="sourceLineNo">5632</span>        // If the size limit was reached it means a partial Result is being<a name="line.5632"></a>
+<span class="sourceLineNo">5633</span>        // returned. Returning a<a name="line.5633"></a>
+<span class="sourceLineNo">5634</span>        // partial Result means that we should not reset the filters; filters<a name="line.5634"></a>
+<span class="sourceLineNo">5635</span>        // should only be reset in<a name="line.5635"></a>
+<span class="sourceLineNo">5636</span>        // between rows<a name="line.5636"></a>
+<span class="sourceLineNo">5637</span>        if (!scannerContext.partialResultFormed()) resetFilters();<a name="line.5637"></a>
+<span class="sourceLineNo">5638</span><a name="line.5638"></a>
+<span class="sourceLineNo">5639</span>        if (isFilterDoneInternal()) {<a name="line.5639"></a>
+<span class="sourceLineNo">5640</span>          moreValues = false;<a name="line.5640"></a>
+<span class="sourceLineNo">5641</span>        }<a name="line.5641"></a>
+<span class="sourceLineNo">5642</span><a name="line.5642"></a>
+<span class="sourceLineNo">5643</span>        // If copyCellsFromSharedMem = true, then we need to copy the cells. Otherwise<a name="line.5643"></a>
+<span class="sourceLineNo">5644</span>        // it is a call coming from the RsRpcServices.scan().<a name="line.5644"></a>
+<span class="sourceLineNo">5645</span>        if (copyCellsFromSharedMem &amp;&amp; !outResults.isEmpty()) {<a name="line.5645"></a>
+<span class="sourceLineNo">5646</span>          // Do the copy of the results here.<a name="line.5646"></a>
+<span class="sourceLineNo">5647</span>          ListIterator&lt;Cell&gt; listItr = outResults.listIterator();<a name="line.5647"></a>
+<span class="sourceLineNo">5648</span>          Cell cell = null;<a name="line.5648"></a>
+<span class="sourceLineNo">5649</span>          while (listItr.hasNext()) {<a name="line.5649"></a>
+<span class="sourceLineNo">5650</span>            cell = listItr.next();<a name="line.5650"></a>
+<span class="sourceLineNo">5651</span>            if (cell instanceof ShareableMemory) {<a name="line.5651"></a>
+<span class="sourceLineNo">5652</span>              listItr.set(((ShareableMemory) cell).cloneToCell());<a name="line.5652"></a>
+<span class="sourceLineNo">5653</span>            }<a name="line.5653"></a>
+<span class="sourceLineNo">5654</span>          }<a name="line.5654"></a>
+<span class="sourceLineNo">5655</span>        }<a name="line.5655"></a>
+<span class="sourceLineNo">5656</span>      } finally {<a name="line.5656"></a>
+<span class="sourceLineNo">5657</span>        if (copyCellsFromSharedMem) {<a name="line.5657"></a>
+<span class="sourceLineNo">5658</span>          // In case of copyCellsFromSharedMem==true (where the CPs wrap a scanner) we return<a name="line.5658"></a>
+<span class="sourceLineNo">5659</span>          // the blocks then and there (for wrapped CPs)<a name="line.5659"></a>
+<span class="sourceLineNo">5660</span>          this.shipped();<a name="line.5660"></a>
+<span class="sourceLineNo">5661</span>        }<a name="line.5661"></a>
+<span class="sourceLineNo">5662</span>      }<a name="line.5662"></a>
+<span class="sourceLineNo">5663</span>      return moreValues;<a name="line.5663"></a>
+<span class="sourceLineNo">5664</span>    }<a name="line.5664"></a>
+<span class="sourceLineNo">5665</span><a name="line.5665"></a>
+<span class="sourceLineNo">5666</span>    /**<a name="line.5666"></a>
+<span class="sourceLineNo">5667</span>     * @return true if more cells exist after this batch, false if scanner is done<a name="line.5667"></a>
+<span class="sourceLineNo">5668</span>     */<a name="line.5668"></a>
+<span class="sourceLineNo">5669</span>    private boolean populateFromJoinedHeap(List&lt;Cell&gt; results, ScannerContext scannerContext)<a name="line.5669"></a>
+<span class="sourceLineNo">5670</span>            throws IOException {<a name="line.5670"></a>
+<span class="sourceLineNo">5671</span>      assert joinedContinuationRow != null;<a name="line.5671"></a>
+<span class="sourceLineNo">5672</span>      boolean moreValues = populateResult(results, this.joinedHeap, scannerContext,<a name="line.5672"></a>
+<span class="sourceLineNo">5673</span>          joinedContinuationRow);<a name="line.5673"></a>
+<span class="sourceLineNo">5674</span><a name="line.5674"></a>
+<span class="sourceLineNo">5675</span>      if (!scannerContext.checkAnyLimitReached(LimitScope.BETWEEN_CELLS)) {<a name="line.5675"></a>
+<span class="sourceLineNo">5676</span>        // We are done with this row, reset the continuation.<a name="line.5676"></a>
+<span class="sourceLineNo">5677</span>        joinedContinuationRow = null;<a name="line.5677"></a>
+<span class="sourceLineNo">5678</span>      }<a name="line.5678"></a>
+<span class="sourceLineNo">5679</span>      // As the data is obtained from two independent heaps, we need to<a name="line.5679"></a>
+<span class="sourceLineNo">5680</span>      // ensure that result list is sorted, because Result relies on that.<a name="line.5680"></a>
+<span class="sourceLineNo">5681</span>      sort(results, comparator);<a name="line.5681"></a>
+<span class="sourceLineNo">5682</span>      return moreValues;<a name="line.5682"></a>
+<span class="sourceLineNo">5683</span>    }<a name="line.5683"></a>
+<span class="sourceLineNo">5684</span><a name="line.5684"></a>
+<span class="sourceLineNo">5685</span>    /**<a name="line.5685"></a>
+<span class="sourceLineNo">5686</span>     * Fetches records with currentRow into results list, until next row, batchLimit (if not -1) is<a name="line.5686"></a>
+<span class="sourceLineNo">5687</span>     * reached, or remainingResultSize (if not -1) is reaced<a name="line.5687"></a>
+<span class="sourceLineNo">5688</span>     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.<a name="line.5688"></a>
+<span class="sourceLineNo">5689</span>     * @param scannerContext<a name="line.5689"></a>
+<span class="sourceLineNo">5690</span>     * @param currentRowCell<a name="line.5690"></a>
+<span class="sourceLineNo">5691</span>     * @return state of last call to {@link KeyValueHeap#next()}<a name="line.5691"></a>
+<span class="sourceLineNo">5692</span>     */<a name="line.5692"></a>
+<span class="sourceLineNo">5693</span>    private boolean populateResult(List&lt;Cell&gt; results, KeyValueHeap heap,<a name="line.5693"></a>
+<span class="sourceLineNo">5694</span>        ScannerContext scannerContext, Cell currentRowCell) throws IOException {<a name="line.5694"></a>
+<span class="sourceLineNo">5695</span>      Cell nextKv;<a name="line.5695"></a>
+<span class="sourceLineNo">5696</span>      boolean moreCellsInRow = false;<a name="line.5696"></a>
+<span class="sourceLineNo">5697</span>      boolean tmpKeepProgress = scannerContext.getKeepProgress();<a name="line.5697"></a>
+<span class="sourceLineNo">5698</span>      // Scanning between column families and thus the scope is between cells<a name="line.5698"></a>
+<span class="sourceLineNo">5699</span>      LimitScope limitScope = LimitScope.BETWEEN_CELLS;<a name="line

<TRUNCATED>

[15/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
index d84f23a..0f4faa3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
@@ -38,7 +38,9 @@
 <li><a href="TestProcedureToString.SimpleStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestProcedureToString.SimpleStateMachineProcedure</a></li>
 <li><a href="TestYieldProcedures.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures</a></li>
 <li><a href="TestYieldProcedures.TestProcEnv.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestProcEnv</a></li>
+<li><a href="TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestRunQueue</a></li>
 <li><a href="TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestStateMachineProcedure</a></li>
+<li><a href="TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">TestYieldProcedures.TestYieldProcedure</a></li>
 </ul>
 <h2 title="Enums">Enums</h2>
 <ul title="Enums">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
index c128080..2bb01b5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
@@ -191,9 +191,17 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestYieldProcedure</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index b6de721..ebc1849 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -110,6 +110,12 @@
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureToString.DoublingStateStringBasicProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureToString.DoublingStateStringBasicProcedure</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestYieldProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestYieldProcedure</span></a></li>
+</ul>
+</li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.ProcedureSimpleRunQueue (implements org.apache.hadoop.hbase.procedure2.ProcedureRunnableSet)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestRunQueue</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="strong">ProcedureTestingUtility</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
index 7034082..c76c3c0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
@@ -138,9 +138,12 @@
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestProcEnv.html#org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestProcEnv</a>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestRunQueue.html#org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestRunQueue</a>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/TestYieldProcedures.TestStateMachineProcedure.State.html#org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.State</a>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/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 d07bd89..bc9f263 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
@@ -202,7 +202,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
-<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
+<code>acquireLock, addStackIndex, beforeReplay, childrenCountDown, compareTo, completionCleanup, convert, convert, createProcedureInfo, elapsedTime, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getResult, getRootProcedureId, getStackIndexes, getStartTime, getState, getTimeout, getTimeRemaining, hasException, hasOwner, hasParent, hasTimeout, incChildrenLatch, isFailed, isFinished, isSuccess, isWaiting, isYieldAfterExecutionStep, newInstance, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setNonceKey, setOwner, setParentProcId, setProcId, setResult, setStackIndexes, setStartTime, setState, setTimeout, setTimeoutFailure, shouldWaitClientAck, toString, toStringClass, toStringClassDetails, toStringState, updateTimestamp, validateClass, wasExecuted</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
index d471414..9712618 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.383">TestScannerHeartbeatMessages.HeartbeatHRegion</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.445">TestScannerHeartbeatMessages.HeartbeatHRegion</a>
 extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <div class="block">Custom HRegion class that instantiates <code>RegionScanner</code>s with configurable sleep times
  between fetches of row Results and/or column family cells. Useful for emulating an instance
@@ -274,7 +274,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>rowSleepTime</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.385">rowSleepTime</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.447">rowSleepTime</a></pre>
 </li>
 </ul>
 <a name="sleepBetweenRows">
@@ -283,7 +283,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepBetweenRows</h4>
-<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.386">sleepBetweenRows</a></pre>
+<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.448">sleepBetweenRows</a></pre>
 </li>
 </ul>
 <a name="sleepBeforeColumnFamily">
@@ -292,7 +292,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepBeforeColumnFamily</h4>
-<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.393">sleepBeforeColumnFamily</a></pre>
+<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.455">sleepBeforeColumnFamily</a></pre>
 </li>
 </ul>
 <a name="columnFamilySleepTime">
@@ -301,7 +301,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>columnFamilySleepTime</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.394">columnFamilySleepTime</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.456">columnFamilySleepTime</a></pre>
 </li>
 </ul>
 <a name="sleepBetweenColumnFamilies">
@@ -310,7 +310,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sleepBetweenColumnFamilies</h4>
-<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.395">sleepBetweenColumnFamilies</a></pre>
+<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.457">sleepBetweenColumnFamilies</a></pre>
 </li>
 </ul>
 </li>
@@ -327,7 +327,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.397">TestScannerHeartbeatMessages.HeartbeatHRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.459">TestScannerHeartbeatMessages.HeartbeatHRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                                              org.apache.hadoop.hbase.wal.WAL&nbsp;wal,
                                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                              org.apache.hadoop.conf.Configuration&nbsp;confParam,
@@ -342,7 +342,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.402">TestScannerHeartbeatMessages.HeartbeatHRegion</a>(org.apache.hadoop.hbase.regionserver.HRegionFileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.464">TestScannerHeartbeatMessages.HeartbeatHRegion</a>(org.apache.hadoop.hbase.regionserver.HRegionFileSystem&nbsp;fs,
                                              org.apache.hadoop.hbase.wal.WAL&nbsp;wal,
                                              org.apache.hadoop.conf.Configuration&nbsp;confParam,
                                              org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
@@ -363,7 +363,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>columnFamilySleep</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.407">columnFamilySleep</a>()</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.469">columnFamilySleep</a>()</pre>
 </li>
 </ul>
 <a name="rowSleep()">
@@ -372,7 +372,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>rowSleep</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.416">rowSleep</a>()</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.478">rowSleep</a>()</pre>
 </li>
 </ul>
 <a name="instantiateRegionScanner(org.apache.hadoop.hbase.client.Scan, java.util.List, boolean)">
@@ -381,7 +381,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegion</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>instantiateRegionScanner</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.427">instantiateRegionScanner</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
+<pre>protected&nbsp;org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html#line.489">instantiateRegionScanner</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
                                                                           <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;additionalScanners,
                                                                           boolean&nbsp;copyCells)
                                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
index 505bb27..5b47a76 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html
@@ -113,7 +113,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.343">TestScannerHeartbeatMessages.HeartbeatHRegionServer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.405">TestScannerHeartbeatMessages.HeartbeatHRegionServer</a>
 extends org.apache.hadoop.hbase.regionserver.HRegionServer</pre>
 <div class="block">Custom HRegionServer instance that instantiates <a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver"><code>TestScannerHeartbeatMessages.HeartbeatRPCServices</code></a> in place of
  <code>RSRpcServices</code> to allow us to toggle support for heartbeat messages</div>
@@ -239,7 +239,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegionServer</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatHRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html#line.344">TestScannerHeartbeatMessages.HeartbeatHRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html#line.406">TestScannerHeartbeatMessages.HeartbeatHRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -253,7 +253,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegionServer</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatHRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html#line.348">TestScannerHeartbeatMessages.HeartbeatHRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html#line.410">TestScannerHeartbeatMessages.HeartbeatHRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                    org.apache.hadoop.hbase.CoordinatedStateManager&nbsp;csm)
                                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -274,7 +274,7 @@ extends org.apache.hadoop.hbase.regionserver.HRegionServer</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createRpcServices</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.regionserver.RSRpcServices&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html#line.354">createRpcServices</a>()
+<pre>protected&nbsp;org.apache.hadoop.hbase.regionserver.RSRpcServices&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegionServer.html#line.416">createRpcServices</a>()
                                                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
index 656c658..ea81e6d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html
@@ -118,7 +118,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.499">TestScannerHeartbeatMessages.HeartbeatKVHeap</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.561">TestScannerHeartbeatMessages.HeartbeatKVHeap</a>
 extends org.apache.hadoop.hbase.regionserver.KeyValueHeap</pre>
 <div class="block">Custom KV Heap that can be configured to sleep/wait in between retrievals of column family
  cells. Useful for testing</div>
@@ -260,7 +260,7 @@ extends org.apache.hadoop.hbase.regionserver.KeyValueHeap</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatKVHeap</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html#line.500">TestScannerHeartbeatMessages.HeartbeatKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html#line.562">TestScannerHeartbeatMessages.HeartbeatKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
                                             org.apache.hadoop.hbase.CellComparator&nbsp;comparator)
                                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -273,7 +273,7 @@ extends org.apache.hadoop.hbase.regionserver.KeyValueHeap</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatKVHeap</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html#line.505">TestScannerHeartbeatMessages.HeartbeatKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html#line.567">TestScannerHeartbeatMessages.HeartbeatKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
                                             org.apache.hadoop.hbase.regionserver.KeyValueHeap.KVScannerComparator&nbsp;comparator)
                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -294,7 +294,7 @@ extends org.apache.hadoop.hbase.regionserver.KeyValueHeap</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html#line.511">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatKVHeap.html#line.573">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
            org.apache.hadoop.hbase.regionserver.ScannerContext&nbsp;context)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
index d459c3e..37ce464 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" target="_top">Frames</a></li>
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.362">TestScannerHeartbeatMessages.HeartbeatRPCServices</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.424">TestScannerHeartbeatMessages.HeartbeatRPCServices</a>
 extends org.apache.hadoop.hbase.regionserver.RSRpcServices</pre>
 <div class="block">Custom RSRpcServices instance that allows heartbeat support to be toggled</div>
 </li>
@@ -227,7 +227,7 @@ extends org.apache.hadoop.hbase.regionserver.RSRpcServices</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>heartbeatsEnabled</h4>
-<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html#line.363">heartbeatsEnabled</a></pre>
+<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html#line.425">heartbeatsEnabled</a></pre>
 </li>
 </ul>
 </li>
@@ -244,7 +244,7 @@ extends org.apache.hadoop.hbase.regionserver.RSRpcServices</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatRPCServices</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html#line.365">TestScannerHeartbeatMessages.HeartbeatRPCServices</a>(org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;rs)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html#line.427">TestScannerHeartbeatMessages.HeartbeatRPCServices</a>(org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;rs)
                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -264,7 +264,7 @@ extends org.apache.hadoop.hbase.regionserver.RSRpcServices</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>scan</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html#line.370">scan</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html#line.432">scan</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                                         org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)
                                                                           throws com.google.protobuf.ServiceException</pre>
 <dl>
@@ -303,7 +303,7 @@ extends org.apache.hadoop.hbase.regionserver.RSRpcServices</pre>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
index a80cab4..82b6438 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.471">TestScannerHeartbeatMessages.HeartbeatRegionScanner</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.533">TestScannerHeartbeatMessages.HeartbeatRegionScanner</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Custom RegionScanner that can be configured to sleep between retrievals of row Results and/or
  column family cells</div>
@@ -393,7 +393,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatRegionScanner</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html#line.472">TestScannerHeartbeatMessages.HeartbeatRegionScanner</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html#line.534">TestScannerHeartbeatMessages.HeartbeatRegionScanner</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
                                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;additionalScanners,
                                                    org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                                                    boolean&nbsp;copyCells)
@@ -416,7 +416,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html#line.478">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;outResults,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html#line.540">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;outResults,
               org.apache.hadoop.hbase.regionserver.ScannerContext&nbsp;context)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -432,7 +432,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeKVHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html#line.486">initializeKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html#line.548">initializeKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;joinedScanners,
                     org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
index 5ad8e0d..243f901 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html
@@ -123,7 +123,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.524">TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.586">TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</a>
 extends org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap</pre>
 <div class="block">Custom reversed KV Heap that can be configured to sleep in between retrievals of column family
  cells.</div>
@@ -261,7 +261,7 @@ extends org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html#line.525">TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html#line.587">TestScannerHeartbeatMessages.HeartbeatReversedKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
                                                     org.apache.hadoop.hbase.CellComparator&nbsp;comparator)
                                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -282,7 +282,7 @@ extends org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html#line.531">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedKVHeap.html#line.593">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
            org.apache.hadoop.hbase.regionserver.ScannerContext&nbsp;context)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html
index 65c936c..1b72c05 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.443">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.505">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Custom ReversedRegionScanner that can be configured to sleep between retrievals of row Results
  and/or column family cells</div>
@@ -393,7 +393,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html#line.444">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html#line.506">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</a>(org.apache.hadoop.hbase.client.Scan&nbsp;scan,
                                                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;additionalScanners,
                                                            org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                                                            boolean&nbsp;copyCells)
@@ -416,7 +416,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html#line.450">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;outResults,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html#line.512">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;outResults,
               org.apache.hadoop.hbase.regionserver.ScannerContext&nbsp;context)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -432,7 +432,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeKVHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html#line.458">initializeKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html#line.520">initializeKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;scanners,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.KeyValueScanner&gt;&nbsp;joinedScanners,
                     org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html
new file mode 100644
index 0000000..7404ff7
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestScannerHeartbeatMessages.SparseFilter (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="TestScannerHeartbeatMessages.SparseFilter (Apache HBase 2.0.0-SNAPSHOT Test API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestScannerHeartbeatMessages.SparseFilter.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" target="_top">Frames</a></li>
+<li><a href="TestScannerHeartbeatMessages.SparseFilter.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_org.apache.hadoop.hbase.filter.Filter">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_org.apache.hadoop.hbase.filter.Filter">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.regionserver</div>
+<h2 title="Class TestScannerHeartbeatMessages.SparseFilter" class="title">Class TestScannerHeartbeatMessages.SparseFilter</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.filter.Filter</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.filter.FilterBase</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.SparseFilter</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#line.283">TestScannerHeartbeatMessages.SparseFilter</a>
+extends org.apache.hadoop.hbase.filter.FilterBase</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested_class_summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested_classes_inherited_from_class_org.apache.hadoop.hbase.filter.Filter">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.filter.Filter</h3>
+<code>org.apache.hadoop.hbase.filter.Filter.ReturnCode</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.filter.Filter">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.filter.Filter</h3>
+<code>reversed</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#TestScannerHeartbeatMessages.SparseFilter()">TestScannerHeartbeatMessages.SparseFilter</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.filter.Filter.ReturnCode</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#filterKeyValue(org.apache.hadoop.hbase.Cell)">filterKeyValue</a></strong>(org.apache.hadoop.hbase.Cell&nbsp;v)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static org.apache.hadoop.hbase.filter.Filter</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#parseFrom(byte[])">parseFrom</a></strong>(byte[]&nbsp;pbBytes)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.filter.FilterBase">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.filter.FilterBase</h3>
+<code>createFilterFromArguments, filterAllRemaining, filterRow, filterRowCells, filterRowKey, filterRowKey, getNextCellHint, hasFilterRow, isFamilyEssential, reset, toByteArray, toString, transformCell</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.filter.Filter">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.filter.Filter</h3>
+<code>isReversed, setReversed</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestScannerHeartbeatMessages.SparseFilter()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestScannerHeartbeatMessages.SparseFilter</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#line.283">TestScannerHeartbeatMessages.SparseFilter</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="filterKeyValue(org.apache.hadoop.hbase.Cell)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>filterKeyValue</h4>
+<pre>public&nbsp;org.apache.hadoop.hbase.filter.Filter.ReturnCode&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#line.286">filterKeyValue</a>(org.apache.hadoop.hbase.Cell&nbsp;v)
+                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code>filterKeyValue</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.filter.Filter</code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="parseFrom(byte[])">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>parseFrom</h4>
+<pre>public static&nbsp;org.apache.hadoop.hbase.filter.Filter&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#line.297">parseFrom</a>(byte[]&nbsp;pbBytes)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestScannerHeartbeatMessages.SparseFilter.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html" target="_top">Frames</a></li>
+<li><a href="TestScannerHeartbeatMessages.SparseFilter.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested_classes_inherited_from_class_org.apache.hadoop.hbase.filter.Filter">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields_inherited_from_class_org.apache.hadoop.hbase.filter.Filter">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[12/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html
new file mode 100644
index 0000000..3cbc9f0
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestRunQueue.html
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Before;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertEquals;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import static org.junit.Assert.assertTrue;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, SmallTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestYieldProcedures {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Log LOG = LogFactory.getLog(TestYieldProcedures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final int PROCEDURE_EXECUTOR_SLOTS = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Procedure NULL_PROC = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ProcedureExecutor&lt;TestProcEnv&gt; procExecutor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private TestRunQueue procRunnables;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private ProcedureStore procStore;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private HBaseCommonTestingUtility htu;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileSystem fs;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Path testDir;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Path logDir;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Before<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void setUp() throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htu = new HBaseCommonTestingUtility();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    testDir = htu.getDataTestDir();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    logDir = new Path(testDir, "proc-logs");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    procRunnables = new TestRunQueue();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    procExecutor = new ProcedureExecutor(htu.getConfiguration(), new TestProcEnv(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        procStore, procRunnables);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    procStore.start(PROCEDURE_EXECUTOR_SLOTS);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    procExecutor.start(PROCEDURE_EXECUTOR_SLOTS, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @After<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void tearDown() throws IOException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    procExecutor.stop();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    procStore.stop(false);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fs.delete(logDir, true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public void testYieldEachExecutionStep() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    final int NUM_STATES = 3;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TestStateMachineProcedure[] procs = new TestStateMachineProcedure[3];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      procs[i] = new TestStateMachineProcedure(true, false);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      procExecutor.submitProcedure(procs[i]);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExecutor);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      assertEquals(NUM_STATES * 2, procs[i].getExecutionInfo().size());<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // verify execution<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      int index = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      for (int execStep = 0; execStep &lt; NUM_STATES; ++execStep) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(false, info.isRollback());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      // verify rollback<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      for (int execStep = NUM_STATES - 1; execStep &gt;= 0; --execStep) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        TestStateMachineProcedure.ExecutionInfo info = procs[i].getExecutionInfo().get(index++);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertEquals(true, info.isRollback());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        assertEquals(execStep, info.getStep().ordinal());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // check runnable queue stats<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, procRunnables.size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertEquals(18, procRunnables.addBackCalls);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    assertEquals(15, procRunnables.yieldCalls);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertEquals(19, procRunnables.pollCalls);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(3, procRunnables.completionCalls);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testYieldOnInterrupt() throws Exception {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final int NUM_STATES = 3;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    int count = 0;<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    TestStateMachineProcedure proc = new TestStateMachineProcedure(true, true);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // test execute (we execute steps twice, one has the IE the other completes)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertEquals(NUM_STATES * 4, proc.getExecutionInfo().size());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; NUM_STATES; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertEquals(false, info.isRollback());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      assertEquals(i, info.getStep().ordinal());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>      info = proc.getExecutionInfo().get(count++);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      assertEquals(false, info.isRollback());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      assertEquals(i, info.getStep().ordinal());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // test rollback (we execute steps twice, one has the IE the other completes)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = NUM_STATES - 1; i &gt;= 0; --i) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      TestStateMachineProcedure.ExecutionInfo info = proc.getExecutionInfo().get(count++);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(true, info.isRollback());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      assertEquals(i, info.getStep().ordinal());<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>      info = proc.getExecutionInfo().get(count++);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      assertEquals(true, info.isRollback());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(i, info.getStep().ordinal());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // check runnable queue stats<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertEquals(0, procRunnables.size());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertEquals(12, procRunnables.addBackCalls);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertEquals(11, procRunnables.yieldCalls);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertEquals(13, procRunnables.pollCalls);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public void testYieldException() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    TestYieldProcedure proc = new TestYieldProcedure();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ProcedureTestingUtility.submitAndWait(procExecutor, proc);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertEquals(6, proc.step);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // check runnable queue stats<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    assertEquals(0, procRunnables.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertEquals(0, procRunnables.addFrontCalls);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(6, procRunnables.addBackCalls);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(5, procRunnables.yieldCalls);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    assertEquals(7, procRunnables.pollCalls);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertEquals(1, procRunnables.completionCalls);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private static class TestProcEnv {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public final AtomicLong timestamp = new AtomicLong(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    public long nextTimestamp() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return timestamp.incrementAndGet();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public static class TestStateMachineProcedure<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      extends StateMachineProcedure&lt;TestProcEnv, TestStateMachineProcedure.State&gt; {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    enum State { STATE_1, STATE_2, STATE_3 }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public class ExecutionInfo {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      private final boolean rollback;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      private final long timestamp;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      private final State step;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public ExecutionInfo(long timestamp, State step, boolean isRollback) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        this.timestamp = timestamp;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        this.step = step;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.rollback = isRollback;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      public State getStep() { return step; }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      public long getTimestamp() { return timestamp; }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      public boolean isRollback() { return rollback; }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    private final ArrayList&lt;ExecutionInfo&gt; executionInfo = new ArrayList&lt;ExecutionInfo&gt;();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private final boolean throwInterruptOnceOnEachStep;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    private final boolean abortOnFinalStep;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    public TestStateMachineProcedure() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      this(false, false);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public TestStateMachineProcedure(boolean abortOnFinalStep,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        boolean throwInterruptOnceOnEachStep) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      this.abortOnFinalStep = abortOnFinalStep;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      this.throwInterruptOnceOnEachStep = throwInterruptOnceOnEachStep;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public ArrayList&lt;ExecutionInfo&gt; getExecutionInfo() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return executionInfo;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    protected StateMachineProcedure.Flow executeFromState(TestProcEnv env, State state)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        throws InterruptedException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final long ts = env.nextTimestamp();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info(getProcId() + " execute step " + state + " ts=" + ts);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      executionInfo.add(new ExecutionInfo(ts, state, false));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      Thread.sleep(150);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.debug("THROW INTERRUPT");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        throw new InterruptedException("test interrupt");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>      switch (state) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        case STATE_1:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          setNextState(State.STATE_2);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          break;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        case STATE_2:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          setNextState(State.STATE_3);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          break;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        case STATE_3:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          if (abortOnFinalStep) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setFailure("test", new IOException("Requested abort on final step"));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          return Flow.NO_MORE_STATE;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        default:<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          throw new UnsupportedOperationException();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return Flow.HAS_MORE_STATE;<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>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected void rollbackState(TestProcEnv env, final State state)<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throws InterruptedException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      final long ts = env.nextTimestamp();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      LOG.debug(getProcId() + " rollback state " + state + " ts=" + ts);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      executionInfo.add(new ExecutionInfo(ts, state, true));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Thread.sleep(150);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (throwInterruptOnceOnEachStep &amp;&amp; ((executionInfo.size() - 1) % 2) == 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.debug("THROW INTERRUPT");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        throw new InterruptedException("test interrupt");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>      switch (state) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        case STATE_1:<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          break;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        case STATE_2:<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          break;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        case STATE_3:<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          break;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        default:<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          throw new UnsupportedOperationException();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    protected State getState(final int stateId) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return State.values()[stateId];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    protected int getStateId(final State state) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return state.ordinal();<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>    @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    protected State getInitialState() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return State.STATE_1;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    protected boolean isYieldBeforeExecuteFromState(TestProcEnv env, State state) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return true;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    protected boolean abort(TestProcEnv env) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      aborted.set(true);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static class TestYieldProcedure extends Procedure&lt;TestProcEnv&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private int step = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public TestYieldProcedure() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>    @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    protected Procedure[] execute(final TestProcEnv env) throws ProcedureYieldException {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.info("execute step " + step);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (step++ &lt; 5) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        throw new ProcedureYieldException();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return null;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    protected void rollback(TestProcEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    protected boolean abort(TestProcEnv env) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    protected boolean isYieldAfterExecutionStep(final TestProcEnv env) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return true;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    protected void serializeStateData(final OutputStream stream) throws IOException {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    @Override<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    protected void deserializeStateData(final InputStream stream) throws IOException {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private static class TestRunQueue extends ProcedureSimpleRunQueue {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    private int completionCalls;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    private int addFrontCalls;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    private int addBackCalls;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private int yieldCalls;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private int pollCalls;<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public TestRunQueue() {}<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public void addFront(final Procedure proc) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        addFrontCalls++;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        super.addFront(proc);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>      @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      public void addBack(final Procedure proc) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        addBackCalls++;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        super.addBack(proc);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>      @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      public void yield(final Procedure proc) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        yieldCalls++;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        super.yield(proc);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      public Procedure poll() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        pollCalls++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return super.poll();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      public void completionCleanup(Procedure proc) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        completionCalls++;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>}<a name="line.383"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[46/51] [partial] hbase-site git commit: Published site at f6945c4631e7697976fd8c2272f8152905c6f875.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html
index 944a4c9..b02bd90 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html
@@ -321,7 +321,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../../org/apache/had
 oop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 .html#getTimeout()">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess(
 )">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
index 637a034..d8e4bee 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
@@ -1112,28 +1112,40 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="strong">CreateTableProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="strong">ServerCrashProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="strong">CreateNamespaceProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#shouldWaitClientAck(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">shouldWaitClientAck</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ServerCrashProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#splitLogs(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">splitLogs</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ServerCrashProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#start(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">start</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Start processing of crashed server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">DeleteNamespaceProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.html#undoDeleteFromNSTable(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">undoDeleteFromNSTable</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">undo the delete</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">DeleteNamespaceProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.html#undoRemoveFromZKNamespaceManager(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">undoRemoveFromZKNamespaceManager</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">undo the remove from Zookeeper</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ModifyTableProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.html#updateReplicaColumnsIfNeeded(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20org.apache.hadoop.hbase.HTableDescriptor,%20org.apache.hadoop.hbase.HTableDescriptor)">updateReplicaColumnsIfNeeded</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                         <a href="../../../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;oldHTableDescriptor,
@@ -1141,61 +1153,61 @@
 <div class="block">update replica column families if necessary.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><span class="strong">CreateTableProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#updateTableDescCache(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20org.apache.hadoop.hbase.TableName)">updateTableDescCache</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ModifyTableProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.html#updateTableDescriptor(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">updateTableDescriptor</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Update descriptor</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">AddColumnFamilyProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.html#updateTableDescriptor(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">updateTableDescriptor</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Add the column family to the file system</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">DeleteColumnFamilyProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.html#updateTableDescriptor(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">updateTableDescriptor</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Remove the column family from the file system and update the table descriptor</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ModifyColumnFamilyProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.html#updateTableDescriptor(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">updateTableDescriptor</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Modify the column family from the file system</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ModifyNamespaceProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.html#updateZKNamespaceManager(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">updateZKNamespaceManager</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Update Zookeeper.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><span class="strong">CreateNamespaceProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html#updateZKNamespaceManager(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20org.apache.hadoop.hbase.NamespaceDescriptor)">updateZKNamespaceManager</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                 <a href="../../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;nsDescriptor)</code>
 <div class="block">Update Zookeeper.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ServerCrashProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#verifyAndAssignMeta(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">verifyAndAssignMeta</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">If hbase:meta is not assigned already, assign.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ServerCrashProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#verifyAndAssignMetaWithRetries(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">verifyAndAssignMetaWithRetries</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">If hbase:meta is not assigned already, assign.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><span class="strong">ProcedureSyncWait.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html#waitFor(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20long,%20long,%20java.lang.String,%20org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.Predicate)">waitFor</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
               long&nbsp;waitTime,
@@ -1203,27 +1215,27 @@
               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;purpose,
               <a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.Predicate.html" title="interface in org.apache.hadoop.hbase.master.procedure">ProcedureSyncWait.Predicate</a>&lt;T&gt;&nbsp;predicate)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><span class="strong">ProcedureSyncWait.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html#waitFor(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20java.lang.String,%20org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.Predicate)">waitFor</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;purpose,
               <a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.Predicate.html" title="interface in org.apache.hadoop.hbase.master.procedure">ProcedureSyncWait.Predicate</a>&lt;T&gt;&nbsp;predicate)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><span class="strong">ProcedureSyncWait.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html#waitMetaRegions(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">waitMetaRegions</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="strong">ServerCrashProcedure.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#waitOnAssign(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20java.util.List)">waitOnAssign</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&nbsp;hris)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><span class="strong">ProcedureSyncWait.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html#waitRegionInTransition(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,%20java.util.List)">waitRegionInTransition</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&nbsp;regions)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><span class="strong">ProcedureSyncWait.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html#waitRegionServers(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)">waitRegionServers</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 8d719f7..aaf26d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -145,8 +145,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">DisableTableProcedure.MarkRegionOfflineOpResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">ServerProcedureInterface.ServerOperationType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 779a1d3..7238009 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -352,8 +352,8 @@
 </ul>
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">MetaMutationAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/VersionAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">VersionAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">MetaMutationAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 <h2 title="Enum Hierarchy">Enum Hierarchy</h2>
 <ul>
@@ -361,14 +361,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="strong">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="strong">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="strong">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="strong">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="strong">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="strong">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="strong">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="strong">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="strong">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HealthChecker.HealthCheckerExitStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5eb82203/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
index 5b823e5..e282f2f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
@@ -142,7 +142,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute(TEnvironment)">execute</a>, <a href="../../../../../org/apach
 e/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootPr
 ocedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a
 >, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback(TEnvironment)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData(java.io.OutputStream)">serializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../
 org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/proce
 dure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort(TEnvironment)">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock(TEnvironment)">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex(int)">addStackIndex</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay(TEnvironment)">beforeReplay</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown()">childrenCountDown</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo(org.apache.hadoop.hbase.procedure2.Procedure)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup(TEnvironment)">completionCleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.procedure2.Procedure)">convert</a>
 , <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#convert(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure)">convert</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#createProcedureInfo(org.apache.hadoop.hbase.procedure2.Procedure,%20org.apache.hadoop.hbase.util.NonceKey)">createProcedureInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData(java.io.InputStream)">deserializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute(TEnvironment)">doExecute</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback(TEnvironment)">doRollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime()">elapsedTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute(TEnvironment)">execute</a>, <a href="../../../../../org/apach
 e/hadoop/hbase/procedure2/Procedure.html#getException()">getException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate()">getLastUpdate</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey()">getNonceKey</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner()">getOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId()">getParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId()">getProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode(long)">getProcIdHashCode</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult()">getResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId(java.util.Map,%20org.apache.hadoop.hbase.procedure2.Procedure)">getRootPr
 ocedureId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes()">getStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStartTime()">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState()">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout()">getTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeRemaining()">getTimeRemaining</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException()">hasException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner()">hasOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent()">hasParent</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout()">hasTimeout</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch()">incChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed()">isFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished()">isFinished</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess()">isSuccess</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting()">isWaiting</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep(TEnvironment)">isYieldAfterExecutionStep</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#newInstance(java.lang.String)">newInstance</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock(TEnvironment)">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex()">removeStackIndex</a
 >, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback(TEnvironment)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData(java.io.OutputStream)">serializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure(java.lang.String,%20java.lang.String)">setAbortFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch(int)">setChildrenLatch</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(org.apache.hadoop.hbase.procedure2.RemoteProcedureException)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure(java.lang.String,%20java.lang.Throwable)">setFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey(org.apache.hadoop.hbase.util.NonceKey)">setNonceKey</a>, <a href="../../../../../
 org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner(java.lang.String)">setOwner</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId(long)">setParentProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId(long)">setProcId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult(byte[])">setResult</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes(java.util.List)">setStackIndexes</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStartTime(long)">setStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState)">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout(int)">setTimeout</a>, <a href="../../../../../org/apache/hadoop/hbase/proce
 dure2/Procedure.html#setTimeoutFailure()">setTimeoutFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck(TEnvironment)">shouldWaitClientAck</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass()">toStringClass</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails(java.lang.StringBuilder)">toStringClassDetails</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState(java.lang.StringBuilder)">toStringState</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp()">updateTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#validateClass(org.apache.hadoop.hbase.procedure2.Procedure)">validateClass</a>, <a href="../../../../../org/apache/hadoo
 p/hbase/procedure2/Procedure.html#wasExecuted()">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">